将分区的ORC数据加载到BigQuery

4

我有一个由ts_dateorid分区的Hive数据,并且以下是文件的示例云存储URL

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

以下是生产环境中的云存储实际URL地址。

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

这种结构对于每个月的所有日期,每小时分隔为24小时,对于所有的orid都会有相应的数据。

现在我们想要安排将这种数据加载到BigQuery中,并通过ts_date进行分区并按orid进行聚类。

我已经尝试在控制台上加载一个没有分区的文件,我能够成功地加载数据,但是如何定期安排和加载这种具有由ts_date分区和orid聚类的数据呢?

我刚开始使用GCP,对于Google提供的文档还不够理解,所以有人可以指导或给我一些在UI上运行或用Python编程的思路吗?

提前感谢。

1个回答

1

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

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

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

确保在通过控制台加载ORC数据时启用源数据分区。

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

最后,一旦您有了分区/集群表,您可以使用它作为Cloud Storage的BigQuery数据传输服务的目标,这使您能够定期从云存储加载数据到BigQuery。

谢谢您的回答,但替换时间戳对我没有帮助,因为我的Hive分区数据在S3中,我通过传输将其加载到云存储中,并且ts_date可用于列中。 - Kumara
我已经编辑了我的答案,复制了一个类似的场景,不需要更改路径。使用带有公共前缀的通配符就足以匹配所有ORC文件,并检测您的ts_date和orid参数。 - Fcojavmelo
感谢您的建议,我和原问题一样遇到了同样的问题。我有分区文件想要在分区表中加载。我确实可以先创建一个具有文件架构 + 文件路径名包含的架构的普通表,然后将其转换为新的分区表。但是我无法向这个分区表添加数据。 当使用 bq mk --transfer_config 时,它会抱怨我在文件中缺少列(因此它没有获取到URI列)。 或者使用 bq load 时,它会抱怨URI列已经存在。 - Georges Lorré

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接