GENERATE_TIMESTAMP_ARRAY() 上的 UNNEST 导致语法错误
UNNEST on GENERATE_TIMESTAMP_ARRAY() causes syntax error
我的目标是使用现有的 table 和 patient_id 以及相应的进出医院日期(具体时间戳)(称为 min_time 和 max_time) 创建一个新的 table,其中每个 4 小时的区块是一行 。
Example
我目前的SQL代码如下:
CREATE table new_table as(
SELECT patient_id,
UNNEST(GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR)) as time
FROM parent_table
ORDER BY patient_id, time)
但是我收到以下错误:'Syntax error: Expected ")" but got keyword UNNEST'。我可以轻松创建 timestamp_array,所以我知道 GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR) 有效。我认为问题的出现是因为格式 UNNEST(GENERATE...) 不被接受,但我不确定是否有更好的选择。 知道如何解决吗? (BigQuery 上的代码 运行)
干杯
所以这真的取决于你是想在最终输出中使用数组还是“扁平化”table。
对于最终输出中的数组...
SELECT
patient_id,
GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR) as time
FROM parent_table
ORDER BY patient_id
对于扁平化版本(这听起来像你正在拍摄的)...
SELECT
patient_id,
time
FROM parent_table,
UNNEST(GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR)) as time
ORDER BY patient_id, time
根据附加的示例数据,我假设列 min_time
和 max_time
的数据类型是 DATETIME
,因此您需要将这些列数据类型转换为 TIMESTAMP
首先要能够使用 GENERATE_TIMESTAMP_ARRAY
语法。
在我这边使用示例数据进行了尝试:
脚本:
CREATE TABLE `myproject.mydataset.newtable` AS (
SELECT
patient_id,
DATETIME(time) time
FROM `myproject.mydataset.mytable`,
UNNEST(GENERATE_TIMESTAMP_ARRAY(CAST(min_time AS TIMESTAMP), CAST(max_time AS TIMESTAMP), INTERVAL 4 HOUR)) as time
ORDER BY patient_id, time
)
输出table:
我的目标是使用现有的 table 和 patient_id 以及相应的进出医院日期(具体时间戳)(称为 min_time 和 max_time) 创建一个新的 table,其中每个 4 小时的区块是一行 。
Example
我目前的SQL代码如下:
CREATE table new_table as(
SELECT patient_id,
UNNEST(GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR)) as time
FROM parent_table
ORDER BY patient_id, time)
但是我收到以下错误:'Syntax error: Expected ")" but got keyword UNNEST'。我可以轻松创建 timestamp_array,所以我知道 GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR) 有效。我认为问题的出现是因为格式 UNNEST(GENERATE...) 不被接受,但我不确定是否有更好的选择。 知道如何解决吗? (BigQuery 上的代码 运行)
干杯
所以这真的取决于你是想在最终输出中使用数组还是“扁平化”table。
对于最终输出中的数组...
SELECT
patient_id,
GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR) as time
FROM parent_table
ORDER BY patient_id
对于扁平化版本(这听起来像你正在拍摄的)...
SELECT
patient_id,
time
FROM parent_table,
UNNEST(GENERATE_TIMESTAMP_ARRAY(min_time, max_time, INTERVAL 4 HOUR)) as time
ORDER BY patient_id, time
根据附加的示例数据,我假设列 min_time
和 max_time
的数据类型是 DATETIME
,因此您需要将这些列数据类型转换为 TIMESTAMP
首先要能够使用 GENERATE_TIMESTAMP_ARRAY
语法。
在我这边使用示例数据进行了尝试:
脚本:
CREATE TABLE `myproject.mydataset.newtable` AS (
SELECT
patient_id,
DATETIME(time) time
FROM `myproject.mydataset.mytable`,
UNNEST(GENERATE_TIMESTAMP_ARRAY(CAST(min_time AS TIMESTAMP), CAST(max_time AS TIMESTAMP), INTERVAL 4 HOUR)) as time
ORDER BY patient_id, time
)
输出table: