我正在尝试将数据从Hive迁移到BigQuery。 Hive表中的数据以PARQUET文件格式存储。一列的数据类型为STRING,我正在将文件上传到Google云存储中Hive表的后面,并使用GUI创建BigQuery内部表。导入表中列的数据类型将转换为BYTES。
但是当我导入VARCHAR数据类型的CHAR时,结果数据类型仅为STRING。
有人可以帮助我解释为什么会这样。
答案 0 :(得分:0)
这不能回答最初的问题,因为我不知道到底发生了什么,但是有过类似奇怪行为的经验。
尝试在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,数据已正确显示。