将值从文件插入到配置单元上的现有表

tsm1rwdh  于 2021-06-01  发布在  Hadoop
关注(0)|答案(3)|浏览(309)

我是hadoop生态系统的新手。我尝试使用下面的查询从csv文件创建配置单元表。

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");

这个查询实际上创建了一个表代理数据,并填充了位于指定位置的csv文件中的值。
现在,我想将另一组csv的值附加到同一个表中(它应该跳过csv文件中的标题)。我检查了各种各样的解决方案,但都不能满足我的需要。

l2osamch

l2osamch1#

你能试试这个吗:

hive>  LOAD DATA LOCAL INPATH '/home/yourcsvfile.csv' INTO TABLE proxy_data;
ebdffaop

ebdffaop2#

您可以向表中添加一个属性,该属性将跳过csv的第一行。“skip.header.line.count“=“1”
就你而言,

Alter Table proxy_data SET TBLPROPERTIES ("skip.header.line.count"="1").
sh7euo9m

sh7euo9m3#

您可以遵循以下方法:
使用此属性创建临时表-skip.header.line.count=1
创建具有相同架构的主表(无需使用 skip.header.line.count 子句)。
每次有新文件时,都将覆盖加载到暂存表中
然后,将append staging表的数据加载到主表中。

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:您的表语法没有 row format delimited 条款。请确保按上述方式添加

相关问题