hive - 将数据从 Hive PARQUET 表迁移到 BigQuery,Hive 字符串数据类型正在 BQ 中转换 - BYTES 数据类型
问题描述
我正在尝试将数据从 Hive 迁移到 BigQuery。Hive 表中的数据以 PARQUET 文件格式存储。一列的数据类型是 STRING,我正在将 Hive 表后面的文件上传到 Google 云存储上,并从该文件中使用 GUI 创建 BigQuery 内部表。导入表中列的数据类型正在转换为 BYTES。
但是当我导入 VARCHAR 数据类型的 CHAR 时,结果数据类型仅为 STRING。
有人可以帮我解释为什么会这样。
解决方案
这并不能回答最初的问题,因为我不知道到底发生了什么,但有过类似奇怪行为的经历。
尝试在 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,并且数据应如此。
推荐阅读
- sql - 在 BigQuery 中更新分区表和聚簇表
- jquery - 如何使用来自 jquery 加载的返回值和回调函数中的变量值相同的 jquery 加载?
- docker - 如何将 jupyter/all-spark-notebooks 容器与 docker 中的 hadoop 多节点集群连接起来
- python - 使用条件替换列表中的字符串
- c# - 找不到资源文件c#的路径
- gitlab - 将项目从我的用户名转移到我的组织后,我的用户名显示我是维护者而不是所有者
- apache-spark - 我们如何在数据框中有两行具有相同 id 的行?
- python - 通过终端在 openSUSE Leap 中安装 Python
- perl - 在 linux 中使用 perl 删除单元格(电子表格)中的换行符/新行
- php - Android 和 Laravel 相关问题