代码之家  ›  专栏  ›  技术社区  ›  Little Bobby Tables

从拼花文件创建AWS雅典娜表,并将结构数组作为列

  •  0
  • Little Bobby Tables  · 技术社区  · 6 年前

    我正在尝试使用以下声明从存储在S3中的拼花文件创建一个AWS雅典娜表,例如:

    create table "db"."fufu" (
      foo array<
        struct<
          bar: int, 
          bam: int
        >
      >
    )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    WITH SERDEPROPERTIES ('serialization.format' = '1') 
    LOCATION 's3://yada/yada/'
    TBLPROPERTIES ('has_encrypted_data'='false');
    

    我始终得到以下错误:

    line 3:11: mismatched input '<' expecting {'(', 'array', '>'} (service: amazonathena; status code: 400; error code: invalidrequestexception; request id: ...)
    

    语法似乎是合法的,使用spark的parquet lib文件加载非常好,结构字段的数组类型是struct类型。

    知道什么会导致这个错误吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Davide Stefanutti    6 年前

    需要从数据库名称和表名称中删除双引号。您还需要添加 external 之前 table .

    create external table db.fufu (
      foo array<
        struct<
          bar: int, 
          bam: int
        >
      >
    )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    WITH SERDEPROPERTIES ('serialization.format' = '1') 
    LOCATION 's3://eth-test-ds/test/'
    TBLPROPERTIES ('has_encrypted_data'='false');