【问题标题】:Athena SQL create table with text dataAthena SQL 使用文本数据创建表
【发布时间】:2021-04-02 01:43:09
【问题描述】:

下面是数据的样子

Flight Number: SSSVAD123X Date: 2/8/2020 1:04:40 PM    Page[s] Printed: 1 Document Name: DownloadAttachment  Print Driver: printermodel (printer driver) 

我需要帮助以以下格式创建 Athena SQL 创建表

Flight Number  Date                  Pages Printed  Document Name          Print Driver 
SSSVAD123X     2/8/2020 1:04:40 PM   1              DownloadAttachment     printermodel

这对我来说是新的,任何解决方案的方向都会起作用

【问题讨论】:

  • 您需要将该数据放入 S3 存储桶(Athena 可以读取),然后使用 Regex Serde 执行 create external table
  • 数据已在 S3 存储桶中,并保存如下
  • 航班号:SSSVAD123X 日期:2/8/2020 1:04:40 PM 页[s] 打印:1 文档名称:下载附件打印驱动程序:printermodel(打印机驱动程序)

标签: amazon-athena


【解决方案1】:

您也许可以使用正则表达式 serde 来解析您的文件。这取决于数据的形状。您只提供一行,因此假设数据文件中的每一行看起来都一样。

这是该功能的 Athena 文档:https://docs.aws.amazon.com/athena/latest/ug/apache.html

您应该能够执行以下操作:

CREATE EXTERNAL TABLE flights (
  flight_number STRING,
  `date` STRING,
  pages_printed INT,
  document_name STRING,
  print_driver STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "^Flight Number:\\s+(\\S+)\\s+Date:\\s+(\\S+)\\s+Page\\[s\\] Printed:\\s+(\\S+)\\s+Document Name:\\s+(\\S+)\\s+Print Driver:\\s+(\\S+)\\s+\\(printer driver\\)$"
 ) LOCATION 's3://example-bucket/some/prefix/'

正则表达式中的每个捕获组将按顺序映射到一列。

由于我无权访问您的数据,因此很遗憾,我无法测试正则表达式,因此其中可能存在错误。希望这个示例足以让您入门。

【讨论】:

    【解决方案2】:

    首先,确保您的数据格式在列之间使用制表符间距,因为您的样本似乎没有一致的分隔符。

    Flight Number   Date    Pages Printed   Document Name   Print Driver 
    SSSVAD123X  2/8/2020 1:04:40 PM 1   DownloadAttachment  printermodel
    

    根据 AWS 文档,如果您的数据不包含用引号括起来的值,请对 CSV、TSV 和自定义分隔文件使用 LazySimpleSerDe。您无需使用 Regex 使其复杂化。

    参考:https://docs.aws.amazon.com/athena/latest/ug/supported-serdes.html

    由于 LazySimpleSerDe 是 AWS Athena 使用的默认值,您甚至不需要声明它,请参阅数据示例的 create table 语句:

    CREATE EXTERNAL TABLE IF NOT EXISTS `mydb`.`mytable` (
        `Flight Number` STRING,
        `Date` STRING,
        `Pages Printed` INT,
        `Document Name` STRING,
        `Print Driver` STRING)
    ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '\t'
        ESCAPED BY '\\'
        LINES TERMINATED BY '\n'
    LOCATION
         's3://awsexamplebucket1-logs/AWSLogs/'
    

    以后你可以使用在线生成器来帮助你:https://www.hivetablegenerator.com/

    从生成器页面:“轻松将任何 JSON(甚至是复杂的嵌套文件)、CSV、TSV 或日志示例文件转换为 Apache HiveQL DDL 创建表语句。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2022-10-14
      • 2020-07-18
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多