【问题标题】:Loading hive-partitioned ORC data into bigquery将配置单元分区的 ORC 数据加载到 bigquery
【发布时间】:2020-12-01 05:18:08
【问题描述】:

我有按 ts_date 和 orid 分区的配置单元数据,下面是文件的示例云存储 url

myhivepartionedbucket/crunched-logs/mrs-suds-sloaders/loader-log/output/{year}/{month}/{Day}/{Hour}/{Min}/ts_date={yyyy-mm-dd}/orid={orid}/file.orc

以下是生产中的云存储实际网址

myhivepartionedbucket/crunched-logs/mrs-suds-sloaders/loader-log/output/2020/08/06/00/30/ts_date=2020-08-05/orid=6691/part-202008060030.orc 

这种结构将存在于每个月的所有日子里,所有 orid 的每个小时都间隔 24 小时

现在我们要安排将此类数据加载到大查询中,按 ts_date 分区,按 orid 聚类。

我已经在控制台上尝试了一个没有分区的文件,我能够加载数据,但是我怎样才能通过 ts_date 的分区和集群的方式定期安排和加载此类数据orid。

我是 GCP 的新手,对 google 提供的文档理解不够,所以有人可以指导或给我一些想法,让我在 UI 或 python 程序上运行

提前致谢

【问题讨论】:

    标签: google-cloud-platform hive google-bigquery google-cloud-storage


    【解决方案1】:

    您可以使用带有公共前缀的wildcard,例如:

    myhivepartionedbucket/crunched-logs/mrs-suds-sloaders/loader-log/output/*.orc
    

    加载所有包含 ORC 数据的文件。

    load ORC data through the console 时请确保启用源数据分区。

    控制台允许您设置多个参数,包括分区和集群。但是,为了partition by column(s),需要从 ORC 文件中推断出的架构至少具有一列 DATE 或 TIMESTAMP 类型,否则在加载 ORC 数据时此选项不可用。由于您计划使用通过 URI 路径 (ts_date) 检测到的列进行分区,因此此选项可能不可用,因此我的建议是将其加载为常规表,然后从查询结果中加载 creating the partitioned/clustered 表的常规表。

    最后,一旦您有了分区/集群表,就可以将其用作BigQuery Data Transfer Service for Cloud Storage 的目标,这样您就可以安排从 Cloud Storage 到 BigQuery 的定期数据加载。

    【讨论】:

    • 感谢您的回答,替换时间戳对我没有帮助,因为我有蜂巢分区数据在 s3 中,并且我通过传输加载到云存储中,并且 ts_date 在列中可用
    • 我已经编辑了答案,复制了类似的场景,无需更改路径。使用带有公共前缀的通配符足以匹配所有 ORC 文件并检测 ts_date 和 orid 参数。
    • 感谢您的建议,我的问题与原始问题相同。我有要加载到分区表中的分区文件。我确实可以首先使用我的文件架构 + 文件路径名称中包含的架构创建一个普通表。然后我可以在一个新的分区表中进行转换。但我无法将数据添加到这个分区表。在使用 bq mk --transfer_config 时,它抱怨我的文件中缺少列(因此它不会拾取 URI 列)。或者使用 bq load 它抱怨 URI 列已经存在。
    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多