无法创建 Hive 唯一分区
Unable to create Hive unique paritions
我无法创建唯一分区。当我上传数据时,它会一次又一次地创建所有日期作为分区,即使日期相同
create table product_order1(id int,user_id int,amount int,product string, city string, txn_date string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
好的
耗时:0.133 秒
LOAD DATA LOCAL INPATH 'txn' INTO TABLE product_order1;
Loading data to table oct19.product_order1
Table oct19.product_order1 stats: [numFiles=1, totalSize=303]
OK
耗时:0.426 秒
hive>
> set hive.exec.dynamic.partition = true;
hive>
> set hive.exec.dynamic.partition.mode = true;
hive>
> create table dyn_part(id int,user_id int,amount int,product string,city string) PARTITIONED BY(txn_date string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
OK
耗时:0.14 秒
hive >
INSERT OVERWRITE TABLE dyn_part PARTITION(txn_date) select id,user_id,amount,product,city,txn_date from product_order1;
我收到的结果:-
Loading data to table oct19.dyn_part partition (txn_date=null)
Time taken for load dynamic partitions : 944
Loading partition {txn_date=04-02-2015}
Loading partition {txn_date= 03-04-2015}
Loading partition {txn_date=01-02-2015}
Loading partition {txn_date=03-04-2015}
Loading partition {txn_date= 01-01-2015}
Loading partition {txn_date=01-01-2015}
Loading partition {txn_date= 01-02-2015}
Time taken for adding to write entity : 5
Partition oct19.dyn_part{txn_date= 01-01-2015} stats: [numFiles=1, numRows=1, totalSize=25, rawDataSize=24]
Partition oct19.dyn_part{txn_date= 01-02-2015} stats: [numFiles=1, numRows=1, totalSize=25, rawDataSize=24]
Partition oct19.dyn_part{txn_date= 03-04-2015} stats: [numFiles=1, numRows=2, totalSize=50, rawDataSize=48]
Partition oct19.dyn_part{txn_date=01-01-2015} stats: [numFiles=1, numRows=1, totalSize=26, rawDataSize=25]
Partition oct19.dyn_part{txn_date=01-02-2015} stats: [numFiles=1, numRows=1, totalSize=26, rawDataSize=25]
Partition oct19.dyn_part{txn_date=03-04-2015} stats: [numFiles=1, numRows=1, totalSize=26, rawDataSize=25]
Partition oct19.dyn_part{txn_date=04-02-2015} stats: [numFiles=1, numRows=1, totalSize=25, rawDataSize=24]
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Cumulative CPU: 4.03 sec HDFS Read: 4166 HDFS Write: 614 SUCCESS
Total MapReduce CPU Time Spent: 4 seconds 30 msec
我注意到有些日期包含空格,有些没有空格:
txn_date= 03-04-2015
和 txn_date=03-04-2015
尝试添加trim
:
INSERT OVERWRITE TABLE dyn_part PARTITION(txn_date)
select id, user_id, amount, product, city, trim(txn_date) as txn_date
from product_order1;
也最好使用 Hive 兼容的日期格式yyyy-MM-dd
,它是可排序的。
要同时格式化日期和删除空格,您可以使用 regexp_replace。
如果你现在的格式是MM-dd-yyyy
,那么你可以这样格式化:
select regexp_replace(' 03-04-2015','.*?(\d{2})-(\d{2})-(\d{4})','--') --fix accordingly if it is dd-MM-yyyy. In this case it should be '--' in the replacement template.
Returns:
2015-03-04
或者这样加载:
INSERT OVERWRITE TABLE dyn_part PARTITION(txn_date)
select id, user_id, amount, product, city,
regexp_replace(txn_date,'.*?(\d{2})-(\d{2})-(\d{4})','--') as txn_date
from product_order1;
正则表达式表示:
'.*?
- 任何字符零次或多次
(\d{2})
- 第一组 2 位数字,将在替换中作为 </code></p>
<p><code>-
字面意思
(\d{2})
- 第二组 2 位数字,将在替换中作为 </code></p>
<p><code>-
字面意思
(\d{4})
- 第三组 4 位数字,将在替换中作为 </code></p>
<p>作为替换 <code>'--'
我们以正确的顺序从正则表达式中提取组,并用破折号分隔。假设 $3 是年份,$1 是月份,$2 是日期中的日期。您按正确的顺序放置组以获得 yyyy-MM-dd
因为无法理解您使用的是哪种格式:MM-dd-yyyy
或 dd-MM-yyyy
我无法创建唯一分区。当我上传数据时,它会一次又一次地创建所有日期作为分区,即使日期相同
create table product_order1(id int,user_id int,amount int,product string, city string, txn_date string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
好的 耗时:0.133 秒
LOAD DATA LOCAL INPATH 'txn' INTO TABLE product_order1;
Loading data to table oct19.product_order1
Table oct19.product_order1 stats: [numFiles=1, totalSize=303]
OK
耗时:0.426 秒
hive>
> set hive.exec.dynamic.partition = true;
hive>
> set hive.exec.dynamic.partition.mode = true;
hive>
> create table dyn_part(id int,user_id int,amount int,product string,city string) PARTITIONED BY(txn_date string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
OK
耗时:0.14 秒
hive >
INSERT OVERWRITE TABLE dyn_part PARTITION(txn_date) select id,user_id,amount,product,city,txn_date from product_order1;
我收到的结果:-
Loading data to table oct19.dyn_part partition (txn_date=null)
Time taken for load dynamic partitions : 944
Loading partition {txn_date=04-02-2015}
Loading partition {txn_date= 03-04-2015}
Loading partition {txn_date=01-02-2015}
Loading partition {txn_date=03-04-2015}
Loading partition {txn_date= 01-01-2015}
Loading partition {txn_date=01-01-2015}
Loading partition {txn_date= 01-02-2015}
Time taken for adding to write entity : 5
Partition oct19.dyn_part{txn_date= 01-01-2015} stats: [numFiles=1, numRows=1, totalSize=25, rawDataSize=24]
Partition oct19.dyn_part{txn_date= 01-02-2015} stats: [numFiles=1, numRows=1, totalSize=25, rawDataSize=24]
Partition oct19.dyn_part{txn_date= 03-04-2015} stats: [numFiles=1, numRows=2, totalSize=50, rawDataSize=48]
Partition oct19.dyn_part{txn_date=01-01-2015} stats: [numFiles=1, numRows=1, totalSize=26, rawDataSize=25]
Partition oct19.dyn_part{txn_date=01-02-2015} stats: [numFiles=1, numRows=1, totalSize=26, rawDataSize=25]
Partition oct19.dyn_part{txn_date=03-04-2015} stats: [numFiles=1, numRows=1, totalSize=26, rawDataSize=25]
Partition oct19.dyn_part{txn_date=04-02-2015} stats: [numFiles=1, numRows=1, totalSize=25, rawDataSize=24]
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Cumulative CPU: 4.03 sec HDFS Read: 4166 HDFS Write: 614 SUCCESS
Total MapReduce CPU Time Spent: 4 seconds 30 msec
我注意到有些日期包含空格,有些没有空格:
txn_date= 03-04-2015
和 txn_date=03-04-2015
尝试添加trim
:
INSERT OVERWRITE TABLE dyn_part PARTITION(txn_date)
select id, user_id, amount, product, city, trim(txn_date) as txn_date
from product_order1;
也最好使用 Hive 兼容的日期格式yyyy-MM-dd
,它是可排序的。
要同时格式化日期和删除空格,您可以使用 regexp_replace。
如果你现在的格式是MM-dd-yyyy
,那么你可以这样格式化:
select regexp_replace(' 03-04-2015','.*?(\d{2})-(\d{2})-(\d{4})','--') --fix accordingly if it is dd-MM-yyyy. In this case it should be '--' in the replacement template.
Returns:
2015-03-04
或者这样加载:
INSERT OVERWRITE TABLE dyn_part PARTITION(txn_date)
select id, user_id, amount, product, city,
regexp_replace(txn_date,'.*?(\d{2})-(\d{2})-(\d{4})','--') as txn_date
from product_order1;
正则表达式表示:
'.*?
- 任何字符零次或多次
(\d{2})
- 第一组 2 位数字,将在替换中作为 </code></p>
<p><code>-
字面意思
(\d{2})
- 第二组 2 位数字,将在替换中作为 </code></p>
<p><code>-
字面意思
(\d{4})
- 第三组 4 位数字,将在替换中作为 </code></p>
<p>作为替换 <code>'--'
我们以正确的顺序从正则表达式中提取组,并用破折号分隔。假设 $3 是年份,$1 是月份,$2 是日期中的日期。您按正确的顺序放置组以获得 yyyy-MM-dd
因为无法理解您使用的是哪种格式:MM-dd-yyyy
或 dd-MM-yyyy