BigQuery 中的 Hive 分区 LAYOUT 表格式
Posted
技术标签:
【中文标题】BigQuery 中的 Hive 分区 LAYOUT 表格式【英文标题】:Hive partitioning LAYOUT table format in BigQuery 【发布时间】:2020-04-07 23:40:26 【问题描述】:我在这种情况下有很多 qsn。所以这里是:
是否有人曾将 Kafka 的输出写入 Google Cloud Storage (GCS) 存储桶,以便该存储桶中的数据使用“默认配置单元分区布局”进行分区 这样做的目的是这个外部表需要在 BigQuery 中是“可查询的” 谷歌的文档在这里,但想看看是否有人有一个例子(https://cloud.google.com/bigquery/docs/hive-partitioned-queries-gcs)
例如文档说“文件遵循默认布局,键/值对布局为目录,以 = 符号作为分隔符,分区键始终按相同顺序排列。”
不清楚的是 a) Kafka 是动态创建这些目录还是我必须预先创建它们?假设我想让 KAFKA 根据 GCS 中的日期写入目录
gs://bucket/table/dt=2020-04-07/
今晚,午夜过后,我是否已经预先创建了这个新目录 gs://bucket/table/dt=2020-04-08/ 或者 Kafka 可以为我创建它,并且在所有这些中,hive 分区布局如何帮帮我?
我每天尝试放入这些目录的表数据是否需要将“dt”(来自 gs://bucket/table/dt=2020-04-07/)作为列?
因为所有这一切的目标是让 BigQuery 查询这个外部表,底层是引用这个存储桶中的所有数据,即
gs://bucket/table/dt=2020-04-06/
gs://bucket/table/dt=2020-04-07/
gs://bucket/table/dt=2020-04-08/
只是想看看这是否是正确的方法。
【问题讨论】:
我添加了标签,因为这更像是 Kafka+Hive 问题而不是 BigQuery 问题 很遗憾这个问题被关闭了,因为我可以提供答案(Kafka Connect)。 @felipehoffa ,这仍然是一个 BigQuery qsn。蜂巢分区只是一种分区布局。它与蜂巢无关。 我添加了我的投票以重新开放。我们还需要一张@RobinMoffatt 的一票(同时我会尝试从朋友那里得到它) 我也觉得这个问题可以解决。我投了赞成票。 【参考方案1】:Kafka 本身是一个消息传递系统,它允许在进程、应用程序和服务器之间交换数据,但它需要生产者和消费者(here 就是一个例子)来移动数据。例如:
生产者需要在 BigQuery 可以读取的 format 中发送数据。
并且消费者需要使用有效的 Hive 布局写入数据。
消费者应该写信给 GCS,因此您需要为您的应用程序找到合适的连接器(例如,Java connector 或 Confluent connector)。在将消息写入 GCS 时,您需要注意使用有效的“默认配置单元分区布局”。
例如,gs://bucket/table/dt=2020-04-07/
、dt
是表分区所在的列,2020-04-07
是其值之一,因此请注意这一点。在 GCS 中拥有有效的 Hive 布局后,您需要在 BigQuery 中创建一个表,我建议从 UI 中创建一个本机表并选择 Google Cloud Storage 作为源并启用“Source Data Partitioned”,但您也可以使用 - hive_partitioning_source_uri_prefix 和 --hive_partitioning_mode 将 GCS 数据与 BigQuery 表链接起来。
由于所有这些过程都意味着不同的开发和配置层,如果这个过程对您有意义,我建议您针对可能遇到的任何特定错误提出新问题。
最后但并非最不重要的一点是,如果 Hive 布局对于您的用例不是必需的,那么将 Kafka to BigQuery connector 和 other connectors 从 Kafka 摄取到 GCP 可以提供更好的帮助。
【讨论】:
以上是关于BigQuery 中的 Hive 分区 LAYOUT 表格式的主要内容,如果未能解决你的问题,请参考以下文章