![](/img/trans.png)
[英]Write query results from a table to a partitioned - clustered table in BigQuery
[英]bigquery: create partitioned table from query results does NOT partition old timestamps
我正在尝试从 BigQuery 中的公共数据集中对表进行分区。
这是所需 output 的standard SQL
查询:
#standardSQL
CREATE OR REPLACE TABLE <TARGET_TABLE_REF>
PARTITION BY
DATE(trip_start_timestamp)
AS (
SELECT trip_start_timestamp, trip_seconds, fare, tips
FROM bigquery-public-data.chicago_taxi_trips.taxi_trips
WHERE
trip_start_timestamp >= '2022-01-01' AND
trip_start_timestamp < '2022-07-01'
);
我正在使用Python BigQuery Client
运行查询,output 是一个仅过滤从 2022-06-15 到 2022-06-01 的时间戳的表。
预期的 output当然是一个分区表,其过滤日期范围在限定过滤器(即 WHERE 子句)中指定。
正如其他帖子中所建议的那样,我尝试重新创建目标表,使用 TIMESTAMP 和 DATE 函数转换时间戳,完全删除 WHERE 子句等。分区表没有选择早于 2022 年 6 月或 2022 年 5 月的时间戳。
这是一个与问题相关的问题,实际上没有答案,但有一些有用的评论。
我尝试了什么?
CAST
子句中的时间戳转换为TIMESTAMP
和/或DATE
PARSE_TIMESTAMP
是否有任何有见地的读者可以对此重新审视并提供一些见解?
编辑:
由于下面的@Brad 回答无法解决问题,因此我提供了有关本地环境的更多上下文。 我已经用不同的数据集测试了相同的脚本,但仍然无法获得旧日期的任何 output。 符合条件的过滤器只选择从 2022 年 5 月到 2022 年 6 月的日期。在此之前的任何时间都不会在 output 表中报告。
OS:
VERSION="22.04.1 LTS (Jammy Jellyfish)"
Linux Kernel 5.15.0-46-generic
Runtime: Python 3.10.4 [GCC 11.2.0] on linux
Text Editor: VSC
Browser: FF
这是一个额外的屏幕截图,显示即使在控制台中,脚本也不会返回预期的结果:
如您所见,2022 年 5 月之前没有日期
已更新以添加指向结果和可执行查询的链接。
我在下面的代码中重新创建了您的问题和示例查询。 这些按预期运行,从而产生了此数据。
在此处在 Google Cloud 控制台上共享。
CREATE OR REPLACE TABLE
sandbox.data_mart_target
PARTITION BY
DATE(trip_start_timestamp) AS (
SELECT
trip_start_timestamp,
trip_seconds,
fare,
tips
FROM
bigquery-public-data.chicago_taxi_trips.taxi_trips
WHERE
trip_start_timestamp >= '2022-01-01'
AND trip_start_timestamp < '2022-06-30' );
SELECT
*
FROM
`sandbox.data_mart_target`
WHERE
trip_start_timestamp BETWEEN TIMESTAMP('2022-01-01 00:00:00')
AND TIMESTAMP('2022-01-30 23:59:59');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.