我正在尝试设计一种数据管道,将配置单元表迁移到bigquery中。配置单元正在hadoop本地群集上运行。这是我目前的设计,其实很简单,只是一个shell脚本:
对于每个表源配置单元表{
插入覆盖表
target_avro_hive_table SELECT * FROM source_hive_table;
使用将生成的avro文件移动到google云存储中 distcp
创建第一个bq表: bq load --source_format=AVRO your_dataset.something something.avro
从bigquery本身处理任何转换问题,因此从刚刚编写的表中选择并手动处理任何转换
}
你觉得有道理吗?有没有更好的方法,也许是使用spark?我对处理转换的方式不满意,我希望避免两次创建bigquery表。
1条答案
按热度按时间2w3kk1z51#
是的,您的迁移逻辑是合理的。
我个人更喜欢将特定类型的强制转换直接转换到生成avro(配置单元)数据的初始“配置单元查询”中。例如,配置单元中的“decimal”类型Map到avro“type”:“type”:“bytes”,“logicaltype”:“decimal”,“precision”:10,“scale”:2
bq将只接受主类型(这里是“bytes”),而不是logicaltype。所以这就是为什么我发现直接在Hive中投射更容易(这里是“加倍”)。同样的问题也发生在日期配置单元类型上。