我的数据无法进行日期分区,如何使用群集?

时间:2018-08-11 18:12:50

标签: google-bigquery partition clustered-index

目前,我使用以下查询: 选择   ID,   键 从   mydataset.mytable   其中ID = 100077113并且Key ='06019'

我的数据有1亿行:

ID-唯一

密钥-可以具有约10,000个密钥

如果我知道查找ID的键可以完成大约10,000行,并且工作速度更快并且处理的数据更少。

如何在BigQuery中使用新的聚类功能对字段Key进行分区?

4 个答案:

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

我在这里学到的东西

  • 即使没有日期进行分区的表,聚簇也可以使用唯一的ID。
  • 更喜欢使用假日期而不是空日期(但仅限于现在-应该加以改进)。
  • 通过id查找行时,聚类使我的查询便宜99.6%!

了解更多: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的整数。