我正在通过使用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}'
有没有可能向它发送某种数组来解析它?这是可行的还是可取的?
1条答案
按热度按时间ngynwnxp1#
我终于想出了一个办法。
您不可能真正编写一个接受可变字段数的hql脚本。但是,您可以编写bash脚本来生成长度可变的hql脚本。我已经为我的团队实现了这一点,但总体思路是写出您希望hql在bash中如何看起来像一个字符串,然后使用
Rscript
读入并识别csv的数据类型。将数据类型与csv头一起存储为一个数组,然后循环遍历这些数组,将信息写入hql。