AWS Athena — как экранировать символы типа ‘,’, которые присутствуют в кавычках

#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 это возможно.