将配置单元查询导出到csv

gab6jxml  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(344)

我正在尝试从导出查询 Hive 给当地人 CSV . 同样的错误仍然存在,任何帮助都将不胜感激!
命令:

insert overwrite local directory '/path/to/directory' 
row format delimited fields terminated by ',' select * from table limit 10;

错误:

errorMessage:org.apache.spark.sql.catalyst.parser.ParseException:
`missing 'TABLE' at 'local'

先谢谢你。

cwdobuhd

cwdobuhd1#

可以从命令行执行以下操作:

$ beeline --silent=true -u jdbc:hive2://localhost:10000  --outputformat=csv2 --showHeader=false -e 'SELECT * FROM table'
mlnl4t2r

mlnl4t2r2#

这就是我在Hive1.2(mapr发行版)中所做的工作,它在两个步骤中完美地为我工作:
第1步:在Hive中或使用时进行 hive -e 命令行上的选项:

INSERT OVERWRITE LOCAL DIRECTORY '/path/to/directory/'
          ROW FORMAT DELIMITED
          FIELDS TERMINATED BY ','
          LINES TERMINATED BY '\n'
          STORED AS TEXTFILE
          select * from table1  limit 1000 ;

步骤2:在命令行中,使用 hadoop fs 命令。

hadoop fs -cat /path/to/directory/*  >  /path/to/directory2/table1_small.csv

或者你甚至可以这样做:

hadoop fs -text /path/to/directory/*  >  /path/to/directory2/table1_small.csv

在上面的例子中,directory2和directory2是不同的位置。如果你有任何问题,请告诉我。

polkgigr

polkgigr3#

hive可以使用 OpenCSVSerde . 您可以在hdfs文件夹上创建一个表,以显示csv文件:

CREATE EXTERNAL TABLE `csv_export`(
 wf_id string,
 file_name string,
 row_count int
)
COMMENT 'output table'
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  'escapeChar'='\\',
  'quoteChar'='\"',
  'separatorChar'=',')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/user/admin/export/folder';

然后,您可以使用任何所需的select查询数据:

INSERT INTO csv_export SELECT a, b, c FROM source_table;

insert into select语句可能是一个复杂的连接,用于查找数据质量问题。产生的结果将是坏记录。
这个 OpenCSVSerde 将为同一语句中插入的行创建一个或多个文件:

hdfs dfs -ls /user/admin/export/folder
Found 2 items
-rwx------   3 admin admin        885 2020-04-29 05:24 /user/admin/export/folder/000000_0

您可以将单个文件下载到磁盘并重命名:

hdfs dfs -copyToLocal /user/admin/export/folder/000000_0
mv 000000_0 output.cvs

如果有很多数据,你会得到一个以上的文件,所以更安全的猫在文件夹中的所有文件到本地文件

hdfs dfs -cat '/user/admin/export/folder/*' > output.cvs

结果output.csv将正确格式化csv数据。

5rgfhyps

5rgfhyps4#

您可以从命令行执行配置单元查询,并通过管道将输出传输到文件。

hive -e "select * from table limit 10" > /path/to/directory/file.tsv

不幸的是,这将为您提供一个以制表符分隔的值文件。我没有找到更改分隔符的方法,但您可以对文件进行后期处理。

相关问题