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