首页 > 解决方案 > 将数据从 Hive PARQUET 表迁移到 BigQuery,Hive 字符串数据类型正在 BQ 中转换 - BYTES 数据类型

问题描述

我正在尝试将数据从 Hive 迁移到 BigQuery。Hive 表中的数据以 PARQUET 文件格式存储。一列的数据类型是 STRING,我正在将 Hive 表后面的文件上传到 Google 云存储上,并从该文件中使用 GUI 创建 BigQuery 内部表。导入表中列的数据类型正在转换为 BYTES。

但是当我导入 VARCHAR 数据类型的 CHAR 时,结果数据类型仅为 STRING。

有人可以帮我解释为什么会这样。

标签: hivegoogle-bigqueryparquet

解决方案


这并不能回答最初的问题,因为我不知道到底发生了什么,但有过类似奇怪行为的经历。

尝试在 Cloudera 和 BigQuery 之间移动表时,我遇到了类似的问题。

首先在 Impala 上将表创建为外部表,例如:

CREATE EXTERNAL TABLE test1
  STORED AS PARQUET
  LOCATION 's3a://table_migration/test1'
  AS select * from original_table

original_table 具有 STRING 数据类型的列

然后将其传输到 GS 并从控制台 GUI 将其导入 BigQuery 中,选项不多,只需选择 Parquet 格式并指向 GS。

令我惊讶的是,我可以看到列现在是 BYTES 类型,列的名称保留得很好,但内容被打乱了。

尝试不同的编解码器、预先创建表格并在 Impala 中插入仍然不会导致任何变化。

最后我尝试在 Hive 中做同样的事情,这很有帮助。

所以我最终在 Hive 中创建了外部表,例如:

CREATE EXTERNAL TABLE test2 (col1 STRING, col2 STRING)
  STORED AS PARQUET
  LOCATION 's3a://table_migration/test2';

insert into table test2 select * from original_table;

并重复相同的舞蹈,从 S3 复制到 GS 并在 BQ 中导入 - 这次没有任何问题。列现在在 BQ 中被识别为 STRING,并且数据应如此。


推荐阅读