我正在尝试设计一种数据管道来将我的Hive表迁移到BigQuery中。 Hive在Hadoop on premise集群上运行。这是我目前的设计,实际上,这很简单,它只是一个shell脚本:
为每个表source_hive_table {
target_avro_hive_table
SELECT * FROM source_hive_table;
distcp
bq load --source_format=AVRO your_dataset.something something.avro
}
你认为这有道理吗?有没有更好的方法,也许使用Spark? 我对处理转换的方式不满意,我想避免两次创建BigQuery表。
答案 0 :(得分:3)
是的,您的迁移逻辑很有意义。
我个人更喜欢直接将特定类型的CAST用于生成Avro(Hive)数据的初始“Hive查询”。例如,Hive中的“ decimal ”类型映射到Avro'类型':“type”:“bytes”,“logicalType”:“decimal”,“precision”:10,“尺度“:2
BQ将采用主要类型(此处为“bytes”)而不是logicalType。 这就是为什么我发现直接在Hive中投射更容易(这里为“double”)。 date-hive类型也会出现同样的问题。