Виртуальный вид клея (созданный terraform) не отображается в Афине - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь использовать Terraform aws_glue_catalog_table для создания Virtual_View, который, как я понимаю, должен отображаться в Афинах как представление.

Пока мой код создает таблицу каталогов в Glue, но ничего появляется в инвентаре Athena Views.

Трудно точно определить, какая часть является проблемой. Я попытался сравнить сгенерированную таблицу склеивания с существующей, созданной вручную, но с той же спецификацией, но в показанной информации нет различий, но часть «оригинального текста» трудно сравнивать при кодировании.

Есть попытался удалить раздел ser_de_info, но, похоже, ничего не изменилось.

Благодарен за любые подсказки здесь!

Действительно не уверен, почему TF не позволяет нам просто отправлять простой оператор SQL DDL для их создания, поскольку этот метод склеивания слишком сложен, чтобы иметь практический смысл - объявление столбцов дважды в 2 разных форматах, сценарий кодирования - оба просто плохи

resource "aws_glue_catalog_table" "aws_gluetable_getresources_vw" {
    name = "getresources_vw" 
    database_name = "mydatabase" 
    table_type = "VIRTUAL _VIEW"

    view_original_text = "/* Presto View: ${base64encode(file("${path.module}/originaltexts/getresources.txt"))} */"
    view_expanded_text = "/* Presto View */" 

    parameters = {
        presto_view = "true"
        comment = "Presto View"
    }

    storage_descriptor { 
        ser_de_info {
            name = " " 
            serialization_library = " " 
        } 

        columns {
            name = "key" 
            type = "string"
        }
        columns {
            name = "value" 
            type = "string"
        }
        columns {
            name = "resourcearn" 
            type = "string"
        }
        columns {
            name = "tags" 
            type = "array<struct<key:string,value:string>>"
        }
         .... more
        }
    }
}

getresources.txt

{
    "catalog":"awsdatacatalog",
    "schema":"mydatabase",
    "columns":[
        {"name":"key","type":"varchar"},
        {"name":"value","type":"varchar"},
        {"name":"resourcearn","type":"varchar"},
        {"name":"tags","type":"array(row(key varchar,value varchar))"},
        {"name":"arn1","type":"varchar"},
        {"name":"arn2","type":"varchar"},
        {"name":"arn3","type":"varchar"},
        {"name":"arn4","type":"varchar"}
    ],
    "originalSql":"SELECT  g.tag.key, g.tag.value, t.resource.resourcearn, t.resource.tags, split_part(t.resource.resourcearn, ':', 1) arn1, split_part(t.resource.resourcearn, ':', 2) arn2, split_part(t.resource.resourcearn, ':', 3) arn3, split_part(t.resource.resourcearn, ':', 6) arn4 FROM  ((ap_ath_meta_use_sbx.getresources h CROSS JOIN UNNEST(h.resourcetagmappinglist) t (resource)) CROSS JOIN UNNEST(t.resource.tags) g (tag))"
}

1 Ответ

1 голос
/ 13 марта 2020

Создать Athena-совместимое представление с помощью API Glue сложно. Я не знаю, как это делает провайдер Terraform, но я предполагаю, что в нем отсутствует одна из многих деталей, которые необходимы для получения правильной информации. Я написал неофициальную документацию в этом ответе: { ссылка }

...