【问题标题】:Migrate hive table to Google BigQuery将 hive 表迁移到 Google BigQuery
【发布时间】:2018-04-08 02:34:39
【问题描述】:

我正在尝试设计一种数据管道来将我的 Hive 表迁移到 BigQuery。 Hive 在 Hadoop 本地集群上运行。这是我目前的设计,其实很简单,就是一个shell脚本:

对于每个表 source_hive_table {

  • 插入覆盖表target_avro_hive_tableSELECT * FROM source_hive_table;
  • 使用distcp 将生成的 avro 文件移动到谷歌云存储中
  • 创建第一个 BQ 表:bq load --source_format=AVRO your_dataset.something something.avro
  • 处理来自 BigQuery 本身的任何转换问题,因此从刚刚编写的表中选择并手动处理任何转换

}

你觉得有道理吗?有没有更好的方法,也许使用 Spark? 我对处理强制转换的方式不满意,我希望避免两次创建 BigQuery 表。

【问题讨论】:

  • 从任何其他数据库迁移到 BigQuery 的最佳/最简单的方法是导出(例如 CSV)、上传到 GCS 并导入。完成。

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


【解决方案1】:

是的,您的迁移逻辑是有道理的。

我个人更喜欢将特定类型的 CAST 直接添加到生成 Avro (Hive) 数据的初始“Hive 查询”中。例如,Hive 中的 "decimal" 类型映射到 Avro 'type':"type":"bytes","logicalType":"decimal","precision":10,"规模”:2

而 BQ 将只采用主要类型(此处为“字节”)而不是逻辑类型。 所以这就是为什么我发现直接在 Hive 中投射更容易(这里是“加倍”)。 date-hive 类型也会出现同样的问题。

【讨论】:

  • 您能否详细说明“CAST 到初始 Hive 查询”?例如,我的问题是 Avro 时间戳到 BQ 时间戳之间的映射。
  • 这是我执行的 Hive 查询示例。你可以在这里看到 2 个演员:CREATE TABLE sluangsay.xxxx STORED AS AVRO AS select cast( itemordervalue as double), hit_time_gmt, cast( datedir as string), post_cookies from tst_bidwh.xxx_source where datedir = '2017-03-24';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多