我有多个按时间戳划分的表,这些表按我指定的列划分。不幸的是,列的名称是不同的,并且表太大/太昂贵,以至于仅更改列名就无法重放。有没有办法引用分区列?
例如,如果我有两个表,并且第一个表在col A上分区,第二个表在col B上分区,有没有办法做:从Table_A,Table_B中选择max(PARTITIONED_COLUMN)
答案 0 :(得分:0)
是的,假设您要更改的表A的列是错误名称。
SELECT
coalesce(A.col1, B.col1) as col1
FROM
Table A, Table B
WHERE **...;
关于第二个问题-如何引用分区列,请参见:
答案 1 :(得分:0)
仔细阅读后,您会对您的虚拟数据和期望的内容发表评论。我建议您使用伪列 _PARTITIONTIME 。根据{{3}}:
创建提取时间分区表时,两个伪 列添加到表中:_PARTITIONTIME伪列和 _PARTITIONDATE伪列。 _PARTITIONTIME伪列包含一个基于日期的时间戳,用于将数据加载到 表。 _PARTITIONDATE伪列包含一个日期 表示。这两个伪列名称都被保留,这意味着 您无法在任何一个 表。
因此,您可以使用伪列为每个表选择 MAX(_PARTITIONTIME) 。我使用了一个公共数据集来展示它是如何工作的。
首先,我将结果写入摄取时间分区表:
bq query \
--destination_table your_project:your_dataset.partitioned_table \
--time_partitioning_type=DAY \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data`.usa_names.usa_1910_current
WHERE
gender = "M"
ORDER BY
number DESC'
然后在控制台中,我使用创建的时间分区表来选择 MAX(_PARTITIONTIME)。
SELECT
MAX(_PARTITIONTIME) AS max_part_date
FROM
`your_project.your_dataset.partitioned_table`
WHERE
DATE(_PARTITIONTIME) = "2020-01-16"
LIMIT
1000
输出:
我希望这会有所帮助。