从多个表中选择分区列

时间:2020-01-14 17:13:41

标签: sql google-bigquery

我有多个按时间戳划分的表,这些表按我指定的列划分。不幸的是,列的名称是不同的,并且表太大/太昂贵,以至于仅更改列名就无法重放。有没有办法引用分区列?

例如,如果我有两个表,并且第一个表在col A上分区,第二个表在col B上分区,有没有办法做:从Table_A,Table_B中选择max(PARTITIONED_COLUMN)

2 个答案:

答案 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

输出:

documentation

我希望这会有所帮助。