如何使用csvserde在同一个配置单元表中加载2个csv文件

mdfafbf1  于 2021-07-15  发布在  Hadoop
关注(0)|答案(1)|浏览(337)

我正试图从hdfs文件夹加载2个csv文件,

Create Table Click_data ( A Timestamp, B string, C int, D BIGINT, E string, F string, G decimal(10,2), H BIGINT, I string) 

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 

STORED AS TEXTFILE Location ‘/user/data/’

tblproperties ("skip.header.line.count"="1");

有两个csv格式的数据集,我们需要跳过标题,如何从hdfs目录将两个文件加载到同一个表中。

ktecyv1j

ktecyv1j1#

表位置中可以有许多文件,所有文件中的头都将被跳过。表位置通常命名为表: /user/data/click_data . 每个table都应该有自己的位置, /user/data/ 似乎位置不正确,它看起来像其他表位置所在的公用文件夹。仔细检查位置是否只属于您的table。
使用将两个文件复制到表位置“/user/data/” hadoop fs -cp 或者 hdfs dfs -cp 或aws cli命令 aws s3 cp :

hadoop fs -cp 'source/path/to/files/*' '/user/data/Click_data'

也可以使用“加载配置单元”命令:

hive> LOAD DATA INPATH 'source/path/to/files/file1.csv' INTO TABLE Click_data;
 hive> LOAD DATA INPATH 'source/path/to/files/file2.csv' INTO TABLE Click_data;

在这两种情况下,两个文件中的数据都是可选择的,并且都跳过了头文件。
或者,您可以在文件所在位置的顶部创建表(如果没有其他文件或文件夹不属于您的表)。只需指定正确的位置。使用 create EXTERNAL table ... . 也可以在不指定位置的情况下创建表,使用 DESC FORMATTED 命令,然后将文件复制到该位置。
将文件加载到表位置后,使用analyze命令更好地刷新表统计信息,这将允许cbo正常工作。请阅读以下内容:https://stackoverflow.com/a/41021682/2700344

相关问题