我有一张表,其中的1行是代表行时间的整数。问题在于表不完整,缺少时间戳。
我想填充缺失的值,这样每10秒就有一行。我希望其余的列为修女(稍后我将向前填充这些修女)。
10秒基本上是10,000。 如果这是python,范围将是:
range(
min(table[column]),
max(table[column]),
10000
)
答案 0 :(得分:1)
如果您的值严格分开10秒,并且缺少10秒间隔的倍数,则可以采用这种方法来填补数据漏洞:
WITH minsmax AS (
SELECT
MIN(time) AS minval,
MAX(time) AS maxval
FROM `dataset.table`
)
SELECT
IF (d.time <= i.time, d.time, i.time) as time,
MAX(IF(d.time <= i.time, d.value, NULL)) as value
FROM (
SELECT time FROM minsmax m, UNNEST(GENERATE_ARRAY(m.minval, m.maxval+100, 100)) AS time
) AS i
LEFT JOIN `dataset.table` d ON 1=1
WHERE ABS(d.time - i.time) >= 100
GROUP BY 1
ORDER BY 1
希望这会有所帮助。
答案 1 :(得分:0)
您可以使用数组。对于数字,您可以执行以下操作:
select n
from unnest(generate_array(1, 1000, 1)) n;
generate_timestamp_array()
和generate_date_array()
也有类似的功能,如果您确实需要这些类型的话。
答案 2 :(得分:0)
我最终通过python API使用以下查询:
"""
SELECT
i.time,
Sensor_Reading,
Sensor_Name
FROM (
SELECT time FROM UNNEST(GENERATE_ARRAY({min_time}, {max_time}+{sampling_period}+1, {sampling_period})) AS time
) AS i
LEFT JOIN
`{input_table}` AS input
ON
i.time =input.Time
ORDER BY i.time
""".format(sampling_period=sampling_period, min_time=min_time,
max_time=max_time,
input_table=input_table)
感谢两个答案