google-bigquery - 从单元格中的 JSON 中提取最后一项
问题描述
我有一个名为submission_date
json 单元格的列,如下所示:
{"submitted":["January 24, 2019","January 25, 2019","January 30,
2019","February 27, 2019"],"submission_canceled":["January 24,
2019","January 25, 2019"],"returned":"February 19, 2019"}
或像这样:
{"submitted":["February 27, 2019","March 5, 2019"],"submission_canceled":"March 5, 2019"}
通过执行以下操作,我可以轻松地从“submission_canceled”字段中获得第一个结果:
json_extract(submission_date, "$.submission_canceled[0]")
我想如果我想保持最后的价值,我会这样做:
json_extract(submission_date, "$.submission_canceled[-1]")
但这只是给我一个空值。如您所见,有时该submission_canceled
字段在列表中会有多个日期,而有时它只有一个日期,而不是在列表中。我想从该submission_canceled
部分获取列表中的单个项目或最后一个项目。
解决方案
以下示例适用于 BigQuery 标准 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 id, '{"submitted":["January 24, 2019","January 25, 2019","January 30, 2019","February 27, 2019"],"submission_canceled":["January 24, 2019","January 25, 2019"],"returned":"February 19, 2019"}' submission_date UNION ALL
SELECT 2, '{"submitted":["February 27, 2019","March 5, 2019"],"submission_canceled":"March 5, 2019"}'
)
SELECT id, REGEXP_REPLACE(ARRAY_REVERSE(SPLIT(JSON_EXTRACT(submission_date, '$.submission_canceled'), '","'))[OFFSET(0)], r'"|\[|\]', '') last_submission_canceled
FROM `project.dataset.table`
结果
Row id last_submission_canceled
1 1 January 25, 2019
2 2 March 5, 2019
更新 - 下面是“更轻”的版本
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 id, '{"submitted":["January 24, 2019","January 25, 2019","January 30, 2019","February 27, 2019"],"submission_canceled":["January 24, 2019","January 25, 2019"],"returned":"February 19, 2019"}' submission_date UNION ALL
SELECT 2, '{"submitted":["February 27, 2019","March 5, 2019"],"submission_canceled":"March 5, 2019"}'
)
SELECT id, REGEXP_EXTRACT(JSON_EXTRACT(submission_date, '$.submission_canceled'), r'"([^"]*)"\]?$') last_submission_canceled
FROM `project.dataset.table`
结果明显相同
Row id last_submission_canceled
1 1 January 25, 2019
2 2 March 5, 2019
推荐阅读
- postgresql - 如何用 PostgreSQL 中的先前值填充 Null?
- sql - 选择两个计数相同的列不同的地方
- javascript - 是否有基于 React 的项目的官方风格指南或命名约定?
- php - 在 Onelogin Openid 重定向中 MFA 后出现 UnauthorizedError
- javascript - asyncPipe 中的方法运行多次
- spring - 创建名为“app.dev.demo.DemoApplicationTests”的 bean 时出错:通过字段“userrepository”表达的不满足依赖关系
- node.js - 如何在 AWS Lambda 层中调试 ffmpeg-static
- python - 如何使用 C++ 以有效的方式生成随机数
- javascript - 反应钩子状态不使用最新
- python - 如何从 Jupyter Notebook 中的对象释放内存