如何在外部表定义中定义 AVRO 架构?

问题描述

我们的 dbt 安装是 0.18.1

包:

  • 包:fishtown-analytics/dbt_utils 版本:0.6.2
  • 包:fishtown-analytics/dbt_external_tables 版本:0.5.0

我们使用 dbt 包在 Redshift 中创建外部表 我们想使用 AVRO 模式,如下例所示。

  CREATE EXTERNAL TABLE my_schema.avro_users (
    name VARCHAR(255),favorite_number INTEGER,favorite_color VARCHAR(255)
  )
  ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
  WITH SERDEPROPERTIES ('avro.schema.literal'='
  {
     "type" : "record","name" : "avro_users","namespace" : "default","fields" : [ {
        "name" : "name","type" : [ "null","string" ],"default" : null
     },{
        "name" : "favorite_number","int" ],{
        "name" : "favorite_color","default" : null
     } ]
  }
  ')
  STORED AS AVRO
  LOCATION 's3://my_bucket

为 Avro 的 Redshift 外部表编写 YML 规范的正确方法是什么? 我们尝试了以下方法

version: 2

sources:
  - name: my_source
    database: dwh
    schema: my_schema
    loader: S3

    tables:
      - name: avro_test_users
        external:
          location: "s3://my_bucket"
          row_format: "serde 'org.apache.hadoop.hive.serde2.avro.avroserde'
            with serdeproperties ('avro.schema.literal'='
                  {
               \"type\" : \"record\",\"name\" : \"avro_users\",\"namespace\" : \"default\",\"fields\" : [ {
                  \"name\" : \"name\",\"type\" : [ \"null\",\"string\" ],\"default\" : null
               },{
                  \"name\" : \"favorite_number\",\"int\" ],{
                  \"name\" : \"favorite_color\",\"default\" : null
               } ]
            }
                  ')"
        columns:
          - name: name
            data_type: VARCHAR(255)
          - name: favorite_number
            data_type: INTEGER
          - name: favorite_number
            data_type: VARCHAR(255)

我们得到以下错误

Encountered an error while running operation: Database Error
  Unsupported serde triplet. InputFormat=org.apache.hadoop.mapred.TextInputFormat OutputFormat=org.apache.hadoop.hive.ql.io.HiveIgnoreKeytextoutputFormat SerializationLib=org.apache.hadoop.hive.serde2.avro.AvroSerDe

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)