1

从带有管道分隔符的大文件中创建具有大量列(字符串)(> 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';
    

我收到一条错误消息,提示“应指定列列表或自定义序列化程序”。我需要一个自定义序列化程序吗?如果外部表没有分区,如何添加分区?

4

1 回答 1

-1
  1. 在 hive 中创建用于创建表的通用脚本。这里使用 hiveconf 动态获取分隔符、路径、表名和模式

    创建表 ${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.将参数传递给shell脚本并运行shell脚本

sh secondstepshellscriptpath urtblname schema details urdelimiter hdfspath

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

在这里,您使用其他工具准备模式,这些工具将产生如下所示的输出..

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

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

于 2013-07-31T06:48:42.247 回答