【问题标题】:how to load csv file into hive如何将csv文件加载到hive
【发布时间】:2016-11-28 15:24:38
【问题描述】:

这是我的 csv 文件

id,name,address

"1xz","hari","streetno=1-23-2,street name=Lakehill,town=Washington"
"2xz","giri","streetno=5-6-3456,street name=second street,town=canada"

我使用行格式分隔符“”加载了此数据,但它没有正确加载,我面临地址字段的问题。在地址字段中我有这种格式的数据 “streetno=1-23- 2,street name=Lakehill,town=Washington" 在这个地址字段中的值再次被 "," 终止。我在 pig 中找到了一个解决方案,帮助我使用 hive 解决它。

我得到这个输出

 "1xz"   "hari"   "streetno=1-23-2
 "2xz"   "giri"   "streetno=5-6-3456

这是我的架构

create table emps (id string,name string,addresss string ) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile;

【问题讨论】:

标签: csv hadoop hive hiveql


【解决方案1】:

使用split()函数,它返回字符串数组:[0]='streetno', [1]='1-23-2':

split(address,'=')[1]  as address --returns '1-23-2'

【讨论】:

    【解决方案2】:

    您已经在 Pig 中找到了一个可行的解决方案,那么为什么不直接使用 HCatalog 将该关系转移到 Hive 表。

    STORE pig_relation INTO 'hive_table_name' USING org.apache.hive.hcatalog.pig.HCatStorer();
    

    确保您使用以下方式启动 Pig:

    >pig -useHCatalog
    

    表必须已经存在于 Hive 中。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:
      CREATE TABLE my_table(a string, b string, ...)
      ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
      

      https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多