Hive

时间:2018-01-02 14:39:01

标签: hadoop hive partitioning

我正在尝试在配置单元中创建基于时间戳的分区。但是hive正在创建基于数据的分区。以下是我的代码。有人可以帮忙吗?

cat test1.sh
    dat=`date +'%Y%m%d %H:%m:%S'`
    hive -f load.hql -hiveconf file_load_timestamp=$dat;

cat load.hql
INSERT OVERWRITE table perm.test partition(file_load_timestamp='${hiveconf:dat}')
SELECT a,b FROM work.temp;

dt=20180102 / = HDFS路径就是这样创建的。

dt=20180102 103455/ =期望像这样创建HDFS路径。

当我尝试使用%Y%m%d_%H:%m:%S'格式时,其按预期工作。但是我需要在日期和时间戳之间留出空间。

1 个答案:

答案 0 :(得分:1)

要在HDFS中使用space创建文件夹名称,需要使用\

来转义空格
hadoop fs -mkdir test\ 123

在hdfs中创建一个名为test 123的文件夹。

同样,hive维护使用分区值创建的文件夹中的分区。这就是为什么提供日期格式%Y%m%d\ %H%m%S将有助于创建带空格的文件夹。 以下是经过测试和运作的:

INSERT OVERWRITE table person_details1 partition(datelocal='20180102\ 200128') select * from person_details;

datelocalString

编辑:执行代码,下面是工作一个:

hduser@Amit:~$ cat test1.sh 
#!/bin/sh

dat=`date +'%Y%m%d\ %H%m%S'`
hive -f load.hql -hiveconf datelocal="$dat";
hduser@Amit:~$ cat load.hql 
INSERT OVERWRITE table amit.person_details1 partition(datelocal='${hiveconf:datelocal}') select * from amit.person_details;