Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash向配置单元脚本发送可变数量的字段_Bash_Hadoop_Hive_Hiveql - Fatal编程技术网

使用bash向配置单元脚本发送可变数量的字段

使用bash向配置单元脚本发送可变数量的字段,bash,hadoop,hive,hiveql,Bash,Hadoop,Hive,Hiveql,通过使用bash脚本将csv移动到HDFS并在其上构建外部配置单元表,我正在自动化数据管道。目前,只有在.hql文件中预定义了表的格式时,这种方法才有效。但是我希望能够从CSV中读取标题,并将它们作为参数发送到配置单元。因此,目前我在循环中通过文件执行此操作: # bash hive -S -hiveconf VAR1=$target_db -hiveconf VAR2=$filename -hiveconf VAR3=$target_folder/$filename -f create_tab

通过使用bash脚本将csv移动到HDFS并在其上构建外部配置单元表,我正在自动化数据管道。目前,只有在.hql文件中预定义了表的格式时,这种方法才有效。但是我希望能够从CSV中读取标题,并将它们作为参数发送到配置单元。因此,目前我在循环中通过文件执行此操作:

# bash
hive -S -hiveconf VAR1=$target_db -hiveconf VAR2=$filename -hiveconf VAR3=$target_folder/$filename -f create_tables.hql 
它被发送到这个

-- hive
CREATE DATABASE IF NOT EXISTS ${hiveconf:VAR1};         
CREATE EXTERNAL TABLE IF NOT EXISTS ${hiveconf:VAR1}.${hiveconf:VAR2}(  
  individual_pkey INT,      
  response CHAR(1)        
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','   
LOCATION '/${hiveconf:VAR3}' 
我希望蜂巢脚本看起来更像这样

CREATE DATABASE IF NOT EXISTS ${hiveconf:VAR1};         
CREATE EXTERNAL TABLE IF NOT EXISTS ${hiveconf:VAR1}.${hiveconf:VAR2}(  
  ${hiveconf:ROW1} ${hiveconf:TYPE1},
  ...              ...
  ${hiveconf:ROW_N} ${hiveconf:TYPE_N}

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','   
LOCATION '/${hiveconf:VAR3}'

是否可以向它发送某种它将要解析的数组?这是可行的还是可取的

我终于想出了解决这个问题的办法

您不能真正编写接受可变字段数的HQL脚本。但是,您可以编写一个bash脚本来生成可变长度的HQL脚本。我已经为我的团队实现了这一点,但总体思路是写出您希望HQL在bash中如何显示为字符串,然后使用类似Rscript的东西读入并识别CSV的数据类型。将数据类型与CSV头一起存储为数组,然后循环遍历这些数组,将信息写入HQL