在Hdfs中将Hive表导出到csv

时间:2015-05-13 20:45:35

标签: hadoop hive

我知道在Hive中将表保存到csv(或其他文本文件)时,分隔符存在已知问题。所以我想知道你们是否可以帮我解决这个问题。

我有一个现有的表(表A),我想将它以csv格式保存到hdfs。从阅读其他回复我相信我必须首先创建一个外部表(但我不确定整个事情的样子)。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:11)

在hive shell中试试这个:

INSERT OVERWRITE LOCAL DIRECTORY '/path/to/hive/csv' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM hivetablename;

/path/to/csv更改为要存储csv文件的位置。您的hive表格hivetablename将以csv格式存储。

答案 1 :(得分:4)

这个三步过程对我来说很好:

    在HIVE中
  1. ,创建一个存储为textfile的新临时表

    CREATE TABLE temp_table( id INT, name STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;
    
  2. in HIVE ,将源数据写入临时表

    INSERT OVERWRITE TABLE temp_table
    SELECT id, name FROM source_table;
    
  3. 从命令行,将Hive表从HDFS中的位置复制到本地文件 - 检查应将文件显示为csv(如果需要,重新命名)

    hdfs dfs -copyToLocal /apps/hive/warehouse/temp_table/* /tmp/local_dir/
    
  4. 如果您在HIVE 中运行SHOW CREATE TABLE temp_table 命令,它会告诉您HDFS中表格的确切位置,例如:

    | LOCATION                                                        |
    |   'hdfs://hadoop_cluster/apps/hive/warehouse/temp_table'        |
    

答案 2 :(得分:1)

对于配置单元中的外部表,您可以按照以下步骤操作:

  1. 在配置单元中创建外部表

    CREATE EXTERNAL TABLE external_table(数字INT,名称STRING)行格式删除字段终止于',' LOCATION' / user / hive / external / mytable /';

  2. <强> 2。将数据文件从本地加载到HDFS位置

    hadoop fs -put /home/user1/Desktop/filename.csv /user/hive/external/mytable/
    

    以上两个步骤可以解决您的问题。

答案 3 :(得分:0)

您可以遵循的3个步骤:-

  1. 创建一个临时表

    DROP TABLE IF EXISTS Test; CREATE TABLE Test ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' AS SELECT * FROM ABC #OR whole query statements

  2. 从创建的配置单元表中创建一个CSV

    hive -e 'set hive.cli.print.header=true; select * from Test' | sed 's/[\t]/,/g' > /home/hadoop/Mycsv.csv

  3. 将创建的CSV文件放置到您想要的任何位置的S3

    hdfs dfs -put -f /home/hadoop/Mycsv.csv 's3://bucketName/'