将文件中的值插入配置单元上的现有 table
Insert values from file to an existing table on hive
我是 hadoop 生态系统的新手。我正在尝试使用以下查询从 CSV 文件创建配置单元 table。
CREATE EXTERNAL TABLE IF NOT EXISTS proxy_data(
date_time TIMESTAMP,time_taken INT, c_ip STRING,
sc_status INT, s_action STRING, sc_bytes INT,
cs_bytes INT, cs_method STRING, cs_uri STRING,
cs_host STRING, uri_port INT, uri_path STRING,
uri_query STRING, username STRING, auth STRING,
supplier_name STRING, content_type STRING, referer STRING,
user_agent STRING, filter_result STRING, categories STRING,
x_virus_id STRING, proxy_ip STRING
)
COMMENT 'Proxy logs'
LOCATION '/user/admin'
tblproperties ("skip.header.line.count"="1");
此查询实际上创建了一个 table proxy_data 并填充了位于指定位置的 csv 文件中存在的值。
现在,我想将另一组 CSV 的值附加到相同的 table(它应该跳过 csv 文件中存在的标题)。我检查了各种解决方案,但没有什么能满足我的需要。
你能试试这个吗:
hive> LOAD DATA LOCAL INPATH '/home/yourcsvfile.csv' INTO TABLE proxy_data;
您可以将 属性 添加到 table 中,这将跳过 csv 的第一行。
"skip.header.line.count"="1"
在你的情况下,
Alter Table proxy_data SET TBLPROPERTIES ("skip.header.line.count"="1").
您可以采用这种方法:
- 使用此 属性 创建暂存 table(临时 table)- skip.header.line.count=1
- 创建一个具有相同架构的主 table(无需在此 table 中使用
skip.header.line.count
子句)。
- 每次有新文件时,将覆盖加载到暂存区 table
然后,加载 append staging table 的数据到主 table.
create table <my_table_stg>(col1 data_type1, col2, data_type2...)
row format delimited fields terminated by ','
tblproperties ("skip.header.line.count"="1");
create table <my_table>(col1 data_type1, col2, data_type2...);
load data inpath '/file/location/my_file.csv' overwrite into table <my_table_stg>;
insert into table <my_table> select * from <my_table_stg>;
P.S:您的 table 语法没有 row format delimited
子句。请务必按照上图添加
我是 hadoop 生态系统的新手。我正在尝试使用以下查询从 CSV 文件创建配置单元 table。
CREATE EXTERNAL TABLE IF NOT EXISTS proxy_data(
date_time TIMESTAMP,time_taken INT, c_ip STRING,
sc_status INT, s_action STRING, sc_bytes INT,
cs_bytes INT, cs_method STRING, cs_uri STRING,
cs_host STRING, uri_port INT, uri_path STRING,
uri_query STRING, username STRING, auth STRING,
supplier_name STRING, content_type STRING, referer STRING,
user_agent STRING, filter_result STRING, categories STRING,
x_virus_id STRING, proxy_ip STRING
)
COMMENT 'Proxy logs'
LOCATION '/user/admin'
tblproperties ("skip.header.line.count"="1");
此查询实际上创建了一个 table proxy_data 并填充了位于指定位置的 csv 文件中存在的值。
现在,我想将另一组 CSV 的值附加到相同的 table(它应该跳过 csv 文件中存在的标题)。我检查了各种解决方案,但没有什么能满足我的需要。
你能试试这个吗:
hive> LOAD DATA LOCAL INPATH '/home/yourcsvfile.csv' INTO TABLE proxy_data;
您可以将 属性 添加到 table 中,这将跳过 csv 的第一行。 "skip.header.line.count"="1"
在你的情况下,
Alter Table proxy_data SET TBLPROPERTIES ("skip.header.line.count"="1").
您可以采用这种方法:
- 使用此 属性 创建暂存 table(临时 table)- skip.header.line.count=1
- 创建一个具有相同架构的主 table(无需在此 table 中使用
skip.header.line.count
子句)。 - 每次有新文件时,将覆盖加载到暂存区 table
然后,加载 append staging table 的数据到主 table.
create table <my_table_stg>(col1 data_type1, col2, data_type2...) row format delimited fields terminated by ',' tblproperties ("skip.header.line.count"="1"); create table <my_table>(col1 data_type1, col2, data_type2...); load data inpath '/file/location/my_file.csv' overwrite into table <my_table_stg>; insert into table <my_table> select * from <my_table_stg>;
P.S:您的 table 语法没有 row format delimited
子句。请务必按照上图添加