我们正在创建一个 Hive 模式来读取大量 JSON 文件。我们的 JSON 模式相当大,我们发现 Hive 的默认 Metastore 模式不能按原样为我们工作。
具体来说,我们架构中的一个字段中有大约 17KiB 的嵌套结构。不幸的是,对于存储结果定义的字段,Hive 似乎有 varchar(4000)
的限制(在此处查看 Derby 模式 def ~v0.10):
CREATE TABLE "COLUMNS_V2" (
"CD_ID" bigint NOT NULL,
"COMMENT" varchar(4000),
"COLUMN_NAME" varchar(128) NOT NULL,
"TYPE_NAME" varchar(4000),
"INTEGER_IDX" INTEGER NOT NULL,
PRIMARY KEY ("CD_ID", "COLUMN_NAME")
);
我们在 Amazon EC2/MapReduce 上运行它(v0.11,默认 Derby metastore)
因此,我们最初的问题是:
• TYPE_NAME 被限制为 4000 是否有原因(IIUC,Derby 上的 varchar
可以增长到 32672,这在很长一段时间内都足够了)
• 我们能否在不破解/重新安装 Hive 的情况下更改 metastore
架构(这会使使用 AWS 的自动化变得复杂)?
• 如果是这样,是否有适当/首选的方法来更新所有节点上的架构?
提前致谢!
最佳答案
是的,您可以更改 TYPE_NAME 的数据类型。如果您有多节点集群,我会建议您使用 MySQL 作为配置单元元存储。可以找到更多相关信息 here
关于json - 更改 Hive 中的 Derby Metastore 以允许具有 >4000B 定义的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25269729/