目前,我使用以下查询:
选择
ID,
键
从
mydataset.mytable
其中ID = 100077113并且Key ='06019'
ID-唯一
如果我知道查找ID的键可以完成大约10,000行,并且工作速度更快并且处理的数据更少。
如何在BigQuery中使用新的聚类功能对字段Key进行分区?
答案 0 :(得分:4)
(我将总结并扩展Mikhail,Pentium10和Pavan所说的话)
我有一个表,其中有1200万行和76 GB的数据。该表没有时间戳列。
这是如何对所述表进行聚类-在为 fake 分区创建伪造的日期列时:
CREATE TABLE `fh-bigquery.public_dump.github_java_clustered`
(id STRING, size INT64, content STRING, binary BOOL
, copies INT64, sample_repo_name STRING, sample_path STRING
, fake_date DATE)
PARTITION BY fake_date
CLUSTER BY id AS (
SELECT *, DATE('1980-01-01') fake_date
FROM `fh-bigquery.github_extracts.contents_java`
)
它起作用了吗?
# original table
SELECT *
FROM `fh-bigquery.github_extracts.contents_java`
WHERE id='be26cfc2bd3e21821e4a27ec7796316e8d7fb0f3'
(3.3s elapsed, 72.1 GB processed)
# clustered table
SELECT *
FROM `fh-bigquery.public_dump.github_java_clustered2`
WHERE id='be26cfc2bd3e21821e4a27ec7796316e8d7fb0f3'
(2.4s elapsed, 232 MB processed)
我在这里学到的东西
了解更多:https://medium.com/@hoffa/bigquery-optimized-cluster-your-tables-65e2f684594b
答案 1 :(得分:1)
您可以拥有一个类型为DATE且值为NULL的文件,因此您可以按该字段进行分区,并且由于该表已分区,因此您可以享受集群的乐趣
答案 2 :(得分:1)
您需要使用其他日期列重新创建表,其中所有行的值都为NULL。然后将分区设置为日期列。这样您的表就可以分区了。
完成此操作后,将基于在查询中标识的列添加集群。集群将缩短处理时间,并降低查询成本。
答案 3 :(得分:1)
现在您可以在integer column上对表进行分区,所以这可能是一个很好的解决方案,请记住每个表的限制为4,000 partitions。因此,因为您有大约10,000个键,所以我建议创建一种将id捆绑在一起的group_key,或者您可能还有另一列可以用作基数<4,000的整数。