Hive 作为select插入配置单元外部表,并确保它在表目录中生成单个文件

Hive 作为select插入配置单元外部表,并确保它在表目录中生成单个文件,hive,Hive,我的问题与下面的帖子有些相似。我想使用selectquery从配置单元表下载一些数据。但由于数据很大,我想将其作为一个外部表写入给定路径。这样我就可以创建一个csv文件。使用下面的代码 create external table output(col1 STRING, col2STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '{outdir}/output'

我的问题与下面的帖子有些相似。我想使用
select
query从配置单元表下载一些数据。但由于数据很大,我想将其作为一个外部表写入给定路径。这样我就可以创建一个csv文件。使用下面的代码

create external table output(col1 STRING, col2STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    LOCATION '{outdir}/output' 

INSERT OVERWRITE TABLE output 
            Select col1, col2 from atable limit 1000
这可以很好地工作,并创建一个
0000
格式的文件,该文件可以复制为csv文件

但我的问题是如何确保
输出总是有一个文件?如果没有定义分区,它总是单个文件吗?它用来分割文件的规则是什么

看到了一些类似的问题如下。但它讨论了hdfs文件访问。

我知道下面的备选方案,但我使用配置单元连接对象从远程节点执行查询


hive-e'selectsql;'|sed的/[\t]/,/g'>outpathwithfilename

在执行
覆盖之前,可以设置以下属性

设置mapreduce.job.reduces=1

注意:如果配置单元引擎不允许在运行时修改,则通过在hive-site.xml中设置以下属性将参数列入白名单


hive.security.authorization.sqlstd.confwhitelist.append=| mapreduce.job.| mapreduce.map.| mapreduce.reduce.*
您可以在执行
覆盖之前设置以下属性

设置mapreduce.job.reduces=1

注意:如果配置单元引擎不允许在运行时修改,则通过在hive-site.xml中设置以下属性将参数列入白名单

hive.security.authorization.sqlstd.confwhitelist.append=| mapreduce.job.| mapreduce.map.| mapreduce.reduce.*