Hive创建了一个包含大量列的表



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

  1. 如果我在创建表命令中提到了100多个列名,这会是一个问题吗
  2. 如果我决定不想为每列命名,我可以a)根本不提及列名,让Hive按照其默认命名来命名列名吗。我该怎么做?b)只提到一些专栏,比如前10篇。在这种情况下,剩下的列会发生什么?我是这样尝试的:

     CREATE EXTERNAL TABLE IF NOT EXISTS table1
     ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
     LOCATION 'folder1/folder2/folder3/filename';
    

我收到一个错误,说"应该指定列列表或自定义序列化程序"。我需要一个自定义的序列化程序吗?如果外部表没有分区,我该如何添加分区?

  1. 为在配置单元中创建表创建一个通用脚本。这里使用hiveconf 动态获取分隔符、路径、表名和模式

    创建表${hiveconf:tablename}(${hiv econf:schema})行格式分隔的字段由"${hiveconf:delimiter}"终止位置"${hiveconf:location}";

  2. 编写一个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脚本中通过从用户动态获取列数来生成上述输出。您可以直接从第二步本身传递该模式。

相关内容

最新更新