Trabalhar com dados CSV no AWS Glue
Esta página descreve como usar o AWS Glue para criar um esquema usando arquivos CSV com valores de dados entre aspas de cada coluna ou de arquivos CSV que incluem valores de cabeçalho.
Lidar com dados CSV entre aspas
Imagine que você tenha um arquivo CSV com campos de dados entre aspas duplas, como no seguinte exemplo.
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
Para executar uma consulta no Athena em uma tabela criada com base em um arquivo CSV que tenha valores entre aspas, você deve modificar as propriedades da tabela no AWS Glue para usar o OpenCSVSerDe. Para obter mais informações sobre o OpenCSV SerDe, consulte Open CSV SerDe para processamento de CSV.
Para editar as propriedades da tabela no console do AWS Glue
-
No painel de navegação do console do AWS Glue, escolha Tables.
-
Escolha o link da tabela que deseja editar e, em seguida, escolha Actions (Ações) e Edit table (Editar tabela).
-
Na página Edit table (Editar tabela), faça as seguintes alterações:
-
Em Serialization lib (Biblioteca de serialização), insira
org.apache.hadoop.hive.serde2.OpenCSVSerde
. -
Em Serde parameters (Parâmetros do Serde), insira os seguintes valores para as chaves
escapeChar
,quoteChar
eseparatorChar
:-
Em
escapeChar
, insira uma barra invertida (\
). -
Em
quoteChar
, insira aspas duplas ("
). -
Em
separatorChar
, insira uma vírgula (,
).
-
-
-
Escolha Salvar.
Para obter mais informações, consulte Exibir e editar detalhes da tabela no Guia do desenvolvedor do AWS Glue.
Você também pode atualizar as propriedades da tabela AWS Glue programaticamente. Use a operação da API AWS Glue UpdateTable ou o comando da AWS CLI update-table para modificar o bloco SerDeInfo
na definição da tabela, conforme mostrado no exemplo de JSON a seguir.
"SerDeInfo": {
"name": "",
"serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
"parameters": {
"separatorChar": ","
"quoteChar": "\""
"escapeChar": "\\"
}
},
Lidar com arquivos CSV com cabeçalhos
Quando você define uma tabela no Athena com uma instrução CREATE TABLE
, pode usar a propriedade de tabela skip.header.line.count
para ignorar os cabeçalhos nos dados CSV, conforme mostrado no exemplo a seguir.
... STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/
csvdata_folder
/'; TBLPROPERTIES ("skip.header.line.count"="1")
Se preferir, remova os cabeçalhos CSV com antecedência para que as informações do cabeçalho não sejam incluídas nos resultados da consulta do Athena. Uma maneira de fazer isso é usar os trabalhos do AWS Glue, que excutam o trabalho de Extract, Transform, and Load (ETL - Extração, transformação e carga). Você pode escrever scripts no AWS Glue usando uma linguagem que é uma extensão do dialeto PySpark Python. Para obter mais informações, consulte Criação de trabalhos no AWS Glue no Guia do desenvolvedor do AWS Glue.
O exemplo a seguir mostra uma função em um script do AWS Glue que escreve um quadro dinâmico usando from_options
e define a opção de formato writeHeader
como falsa, o que remove as informações do cabeçalho:
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")