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

46scxncf  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(289)

我正在通过使用bash脚本将csv移动到hdf并在其上构建外部配置单元表来自动化数据管道。目前,这仅在表的格式在 .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}'

我希望Hive脚本看起来更像这样。。。

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}'

有没有可能向它发送某种数组来解析它?这是可行的还是可取的?

ngynwnxp

ngynwnxp1#

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

相关问题