从一个带有管道分隔符的巨大文件中创建一个包含大量列(String)(>100)的Hive表的最佳方法是什么。
- 如果我在创建表命令中提到了100多个列名,这会是一个问题吗
-
如果我决定不想为每列命名,我可以a)根本不提及列名,让Hive按照其默认命名来命名列名吗。我该怎么做?b)只提到一些专栏,比如前10篇。在这种情况下,剩下的列会发生什么?我是这样尝试的:
CREATE EXTERNAL TABLE IF NOT EXISTS table1 ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION 'folder1/folder2/folder3/filename';
我收到一个错误,说"应该指定列列表或自定义序列化程序"。我需要一个自定义的序列化程序吗?如果外部表没有分区,我该如何添加分区?
-
为在配置单元中创建表创建一个通用脚本。这里使用hiveconf 动态获取分隔符、路径、表名和模式
创建表${hiveconf:tablename}(${hiv econf:schema})行格式分隔的字段由"${hiveconf:delimiter}"终止位置"${hiveconf:location}";
-
编写一个shell脚本来运行上面的脚本
hive-hiveconf表名=$1-hiveconf架构=$2-hiveeconf分隔符=$3-hiveconsf位置=$4-f abovefiltpath.q
3.将参数传递给shell脚本并运行shell脚本
sh secondstepshellscriptpath urtblname schema details urdelimiter hdfspath
使用上述方法,您可以为任何数字列创建一个表,并且它是高度可重用的。
在这里,您使用其他一些工具准备模式,这些工具将产生如下输出。。
"col1 string,sol2 string,col3 string,col4 string etc..."
例如,您可以在shell脚本中通过从用户动态获取列数来生成上述输出。您可以直接从第二步本身传递该模式。