S3 bucket中的AWS Athena外部表将所有数据放在第一列



我正试图从S3中的csv.gz文件在AWS Athena中创建一个外部表。我使用的查询有点像

CREATE EXTERNAL TABLE IF NOT EXISTS table_name (
column1 INT,
column2 STRING,
column3 BIGINT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://bucket/path/'
TBLPROPERTIES ('skip.header.line.count'='1','compressionType'='gzip')

问题是,该查询将所有数据放在表的第一列,而将所有其他列留空,就好像它无法识别分隔符一样。我做错了什么?

以下是其中一个csv文件的前两行:

DT_PROCESSAMENTO,DT_BASE,DT_AGENDAMENTO,DH_ABERTURA,DH_BAIXA,DH_EXEC_INI,DH_EXEC_FIM,ID_SOLICITACAO,ID_TP_OS,ID_TP_FECHAMENTO,ID_CIDADE,CD_EMPRESA,CD_OS,CD_STATUS,CD_BAIXA,CD_CANCELAMENTO,LG_USR_ABERTURA,LG_USR_DESPACHO,LG_USR_BAIXA,LG_USR_VENDEDOR,ST_CONVENIENCIA,ST_IMEDIATA,DS_EQUIPE,CD_BASE,DH_OCORRENCIA,ID_OCORRENCIA,ID_TP_OCORRENCIA,LG_USR_OCORRENCIA,CD_BAIXA_PARA,ID_INDICADOR,DS_INDICADOR,CD_NODE,ID_PONTO,DS_TP_PRODUTO,NM_EMPRESA_EXECUCAO,DS_UNI_BIDI,MIX_DSC,CD_CELULA,NM_BAIRRO,DS_SEGTO_CLIENTE,DS_STATUS_PTV,DS_STATUS_EBT,FX_TEMPO_BASE,DS_TP_OS,DS_AREA_DESP,DS_CD_BAIXA,DS_STATUS_OS,DS_TP_OCORRENCIA,DS_AREA_GEO,NM_REGIONAL,NM_GRUPO,NM_CLUSTER,NM_SUBCLUSTER,NM_CIDADE,DS_PERF_ATENDENTE,DS_PERF_VENDEDOR,DS_PERF_OCORRENCIA,DS_PERF_BAIXA,FG_AV,FG_AV_VPL,FG_AV_PILOTO,FG_AV_SITE,DS_ATENDENTE_SITE,LG_USR_OFENSOR,DS_COLABORADOR,DS_CANAL_ATEND,DS_COORDENADOR,DS_ABERT_ATEND,DS_SITE_OFENSOR
01/02/18 11:00,201801,16/01/18 00:00,16/01/18 14:31,16/01/18 18:11,16/01/18 18:00,16/01/18 18:10,244054819,50,1,533,8256541,1838003383,E,522,,T6156100,OPS$OSWAP,OPS$OSWAP,,NAO,NAO,,12,,,,,522,3,tp-fecha,CICC,11593388,PTV,EMPRESA DO BRASIL,B,Produto1+Produto2+Produto3,codigo,VILA LUGAR,,CONECTADO,CONECTADO,3) 37 A 48,vt - VOIP,AREA LUGAR,T.T - IN / OUT Queimadas,OS TIPO,,,Regional S„o Paulo,Grupo S„o Paulo,Cluster SP Metropolitano,SubCluster SP Oeste,CIDADE,,,,,N„o,N„o,N„o,Sim,AEC,T6156100,NOME DE ALGUEM,NOC,OUTRO NOME DE ALGUEM,EMPRESA BRASIL,CIDADE

请注意,存在编码错误,如São Paulo -> S„o Paulo,我不知道这会对查询产生什么影响,也不知道如何处理。

通过查看示例数据,我能够使用下面的DDL创建一个表,并能够很好地查询数据。

CREATE EXTERNAL TABLE `sample`(
`dt_processamento` string, 
`dt_base` bigint, 
`dt_agendamento` string, 
`dh_abertura` string, 
`dh_baixa` string, 
`dh_exec_ini` string, 
`dh_exec_fim` string, 
`id_solicitacao` bigint, 
`id_tp_os` bigint, 
`id_tp_fechamento` bigint, 
`id_cidade` bigint, 
`cd_empresa` bigint, 
`cd_os` bigint, 
`cd_status` string, 
`cd_baixa` bigint, 
`cd_cancelamento` string, 
`lg_usr_abertura` string, 
`lg_usr_despacho` string, 
`lg_usr_baixa` string, 
`lg_usr_vendedor` string, 
`st_conveniencia` string, 
`st_imediata` string, 
`ds_equipe` string, 
`cd_base` bigint, 
`dh_ocorrencia` string, 
`id_ocorrencia` string, 
`id_tp_ocorrencia` string, 
`lg_usr_ocorrencia` string, 
`cd_baixa_para` bigint, 
`id_indicador` bigint, 
`ds_indicador` string, 
`cd_node` string, 
`id_ponto` bigint, 
`ds_tp_produto` string, 
`nm_empresa_execucao` string, 
`ds_uni_bidi` string, 
`mix_dsc` string, 
`cd_celula` string, 
`nm_bairro` string, 
`ds_segto_cliente` string, 
`ds_status_ptv` string, 
`ds_status_ebt` string, 
`fx_tempo_base` string, 
`ds_tp_os` string, 
`ds_area_desp` string, 
`ds_cd_baixa` string, 
`ds_status_os` string, 
`ds_tp_ocorrencia` string, 
`ds_area_geo` string, 
`nm_regional` string, 
`nm_grupo` string, 
`nm_cluster` string, 
`nm_subcluster` string, 
`nm_cidade` string, 
`ds_perf_atendente` string, 
`ds_perf_vendedor` string, 
`ds_perf_ocorrencia` string, 
`ds_perf_baixa` string, 
`fg_av` string, 
`fg_av_vpl` string, 
`fg_av_piloto` string, 
`fg_av_site` string, 
`ds_atendente_site` string, 
`lg_usr_ofensor` string, 
`ds_colaborador` string, 
`ds_canal_atend` string, 
`ds_coordenador` string, 
`ds_abert_atend` string, 
`ds_site_ofensor` string)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://bucket/path'

如果文件包含标头,则应用tblproperty("skip.header.line.count"="1"(跳过结果中的标头。

最新更新