#amazon-web-services #amazon-s3 #amazon-athena
#amazon-веб-сервисы #amazon-s3 #amazon-athena
Вопрос:
У меня есть таблица в Athena с тремя столбцами, созданными с помощью шаблона ниже
Resources:
TempDataMasterTable:
Type: AWS::Glue::Table
Properties:
DatabaseName: "temp_db"
CatalogId: !Ref AWS::AccountId
TableInput:
Name: "temp_table"
Description: "Master table"
TableType: EXTERNAL_TABLE
Parameters: { "classification" : "csv", "compressionType" : "none", "typeOfData": "file" }
StorageDescriptor:
Location: s3://temp-location/temp-folder/
InputFormat: 'org.apache.hadoop.mapred.TextInputFormat'
OutputFormat: 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
SerdeInfo:
Parameters:
serialization.format: ','
field.delim: ','
SerializationLibrary: 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
Columns:
- {"Name": "name", "Type": "string"}
- {"Name": "address", "Type": "string"}
- {"Name": "desig", "Type": "string"}
Таким образом, в основном столбцы разделяются символом ‘,’ но в моем столбце 2 — адрес можно иметь ‘,’ например, одно из значений в базовом csv имеет «номер дома, улица, город» когда мы просматриваем данные в Athena, таблица неправильно анализируется как улица встолбец 2 отображается как третий столбец из-за того, что ‘,’ является разделителем.
Есть ли способ избежать ‘,’, которые указаны в кавычках?
Комментарии:
1. можете ли вы заменить org.apache.hadoop.hive.serde2.lazy. LazySimpleSerDe с org.apache.hadoop.hive.serde2.OpenCSVSerde и попробуйте запросить его снова?
2. @PrabhakarReddy — Спасибо, это решило проблему
3. Я опубликовал ответ. Пожалуйста, примите это, если это помогло.
Ответ №1:
Заменить serde org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
на org.apache.hadoop.hive.serde2.OpenCSVSerde
. LazySimpleSerDe
не может быть хорошо, когда в столбце рядом с столбцом присутствуют запятые, где OpenCSVSerde
это возможно.