Hive创建包含大量列的表

时间:2013-07-30 18:44:54

标签: hive

从带有管道分隔符的大文件创建包含大量列(String)(> 100)的Hive表的最佳方法是什么。

  1. 如果我在create table命令中提到超过100个列名,那会不会有问题。
  2. 如果我决定不想为每个列命名,我可以a)根本不提及列名,让Hive根据其默认命名命名列名。我该怎么做b)提到只有一些专栏说第10页。在这种情况下,剩下的列会发生什么? 我这样试过:

     CREATE EXTERNAL TABLE IF NOT EXISTS table1
     ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
     LOCATION 'folder1/folder2/folder3/filename';
    
  3. 我收到错误消息“应该指定列列表或自定义序列化程序”。我需要一个自定义序列化器吗? 如果外部表没有分区,我该如何添加分区?

1 个答案:

答案 0 :(得分:-1)

  1. 在hive中创建表创建的通用脚本。 这里使用hiveconf

    动态地获取分隔符,路径,表名和模式

    create table $ {hiveconf:tablename}($ {hiveconf:schema}) 行格式分隔的字段以'$ {hiveconf:delimiter}'结尾  location'$ {hiveconf:location}';

  2. 编写一个shell脚本来运行上面的脚本

    hive -hiveconf tablename = $ 1 -hiveconf schema = $ 2 -hiveconf delimiter = $ 3 -hiveconf location = $ 4 -f abovefilpath.q

  3. 3.将参数传递给shell脚本并运行shell脚本

    sh secondstepshellscriptpath urtblname schema details urdelimiter hdfspath
    

    使用上述方法,您可以为任意数量的列创建一个表,并且它具有高度可重用性。

    在这里,您可以使用其他工具准备架构,这些工具将产生类似下面的输出。

    "col1 string,sol2 string,col3 string,col4 string etc..."
    

    例如,您可以通过从用户动态获取列数来在shell脚本中生成上述输出。您可以直接从第2步本身直接传递该模式。