Especificação do adaptador AWS
Propósito
O adaptador AWS traduz contratos semânticos ContractForge em planejamento nativo de AWS, renderização e, em fases posteriores, artefatos de execução.
O roteiro de implementação é informado pela matriz de paridade AWS pesquisada em paridade de capacidade AWS. Essa matriz deve ser atualizada sempre que Glue, Iceberg, Lake Formation, qualidade de dados ou recursos do conector nativos do AWS mudarem.
A estabilização do tempo de execução é governada pela matriz de estabilização AWS. Essa matriz é a porta de liberação para projetos reais do AWS, evidências de caminhos de falhas, auditorias de tabelas de controle e verificações de reforço de produção.
O destino inicial do adaptador é aws_glue_iceberg:
- tempo de execução: AWS Glue Spark;
- formato de tabela: Apache Iceberg no Amazon S3;
- catalog: AWS Glue Data Catalog;
- governança: AWS Lake Formation;
- evidência: tabelas de evidências Iceberg, com artefatos S3 JSON como substituto/exportação futura.
O adaptador começa com planejamento e renderização, mas agora inclui tempo de execução limitado ajudantes para publicação de artefato, registro de trabalho Glue, início/status do trabalho Glue inspeção e validação de smoke com custo controlado. As implantações padrão do Glue usam um script executor da biblioteca AWS estável que recebe artefato de contrato/ambiente URIs como argumentos Glue. O executor carrega o contrato publicado dentro do Glue, usa o renderizador do adaptador como base de compatibilidade e executa o renderizado Corpo Glue/Spark no processo Glue. O caminho de importação base permanece livre de SDK; AWS Os auxiliares API exigem o tempo de execução extra opcional ou clientes fornecidos pelo chamador.
Design Principles
- O núcleo não importa SDKs
boto3, AWS ou bibliotecas Glue. - O pacote básico do adaptador AWS não requer
boto3; AWS Os ajudantes do API vivem atrás de um extra de tempo de execução opcional. - As escolhas específicas do AWS são expressas por meio de recursos, diagnósticos e artefatos do adaptador.
- Os sub-alvos AWS são explícitos. Não existe uma declaração de capacidade genérica "AWS pode fazer tudo".
- Os marcadores de tarefa Glue são detalhes de implementação do adaptador, não semântica central.
- Os mapeamentos Lake Formation começam de forma conservadora porque os mecanismos de consumo, as concessões IAM e LF afetam o comportamento.
- A evidência deve preservar o modelo de evidência central mesmo quando AWS o persiste de forma diferente de outras plataformas.
Subtargets
| Subtarget | Status | Purpose |
|---|---|---|
aws_glue_iceberg | Meta inicial | Glue Tarefas Spark que gravam tabelas Apache Iceberg em S3 com metadados do catálogo Glue. |
aws_athena_iceberg | Future | Renderização e diagnóstico orientados a SQL para cargas de trabalho Athena/Iceberg. Não é um executor geral. |
aws_emr_serverless_iceberg | Future | Tempo de execução avançado do Spark para tarefas que precisam de mais controle de tempo de execução do que o Glue. |
aws_native_passthrough | Future | Serviços de ingestão nativos do AWS, como AppFlow, DMS ou conectores gerenciados. |
Initial Capabilities: aws_glue_iceberg
O modelo de capacidade principal atual usa booleanos conservadores. O primeiro adaptador AWS mapeia o destino AWS mais rico em PlatformCapabilities da seguinte forma:
PlatformCapabilities(
platform="aws_glue_iceberg",
supports_append=True,
supports_overwrite=True,
supports_merge=True,
supports_hash_diff=True,
supports_scd2=True,
supports_snapshot_reconcile_soft_delete=True,
supports_schema_evolution=True,
supports_row_filters=True,
supports_column_masks=True,
supports_available_now_streaming=True,
supports_required_columns_quality=True,
supports_unique_key_quality=True,
supports_max_null_ratio_quality=True,
supports_expression_quality=True, # Spark SQL runtime checks, with dialect warning
supports_shape=True,
supports_transform=True,
evidence_stores=("iceberg_table",),
review_required_semantics=(
"historical",
"snapshot_reconcile_soft_delete",
"row_filters",
"column_masks",
"source.native_passthrough",
),
)
Alguns booleanos são definidos como True para que o planejador principal possa retornar REVIEW_REQUIRED em vez de UNSUPPORTED para semântica que AWS pode implementar de forma plausível, mas que requer revisão. Esta é a mesma distinção que: "a plataforma possui primitivas, mas o adaptador não tem permissão para reivindicar equivalência semântica automaticamente". A qualidade da expressão é suportada pelas verificações de tempo de execução Spark SQL e retorna SUPPORTED_WITH_WARNINGS porque a portabilidade do dialeto da expressão ainda deve ser revisada.
Mapeamento do modo de gravação
| Modo ContractForge | Initial status | AWS mapping | Notes |
|---|---|---|---|
append | SUPPORTED | Glue Spark anexado à tabela Iceberg | O script Glue gerado cria a tabela Iceberg na primeira execução quando ela não existe e, em seguida, anexa nas execuções posteriores. |
overwrite | SUPPORTED | Glue Spark cria/substitui na tabela Iceberg | O script Glue de primeira passagem é renderizado; regras de substituição de partição são comportamentos detalhados futuros. |
upsert | SUPPORTED | Iceberg MERGE INTO de Glue Spark | O script Glue de primeira passagem é renderizado com proteções de chave ausente, chave nula e chave duplicada. |
hash_diff_upsert | SUPPORTED_WITH_WARNINGS | Hash diff staging plus Iceberg merge | O script de tempo de execução é renderizado; o aviso permanece até que o desempenho e a simultaneidade do Glue/Iceberg sejam validados. |
historical | REVIEW_REQUIRED | Iceberg merge/history implementation | Requer revisão de atrasos, exclusões e encontros efetivos. |
snapshot_reconcile_soft_delete | REVIEW_REQUIRED | Full snapshot reconciliation in Iceberg | Requer prova de integridade da fonte e revisão de simultaneidade. |
O renderizador gera scripts Glue Spark para append, overwrite, upsert e hash_diff_upsert quando as seções de preparação e qualidade podem ser preservadas. Ele também renderiza trabalhos de streaming disponíveis agora para fontes Kafka/Event Hubs suportadas e modos de gravação suportados. os modos histórico e instantâneo permanecem apenas para revisão até que sua implementação nativa seja validada.
Mapeamento de tempo de execução de preparação
O primeiro renderizador de tempo de execução AWS oferece suporte apenas à semântica de preparação que pode ser expressa direta e deterministicamente em um DataFrame Glue Spark antes das verificações e gravações de qualidade:
| Campo de contrato | Comportamento do primeiro tempo de execução | Notes |
|---|---|---|
select_columns | Rendered in Glue job | Falha antes da gravação se uma coluna selecionada estiver faltando. |
column_mapping | Rendered in Glue job | Falha em colunas de origem ausentes, destinos duplicados, colunas de controle reservadas ou colisões de destino. |
filter_expression | Rendered in Glue job | Applied as a Spark SQL filter expression. |
transform.cast | Rendered in Glue job | Usa conversões Spark e falha em colunas de origem ausentes. |
transform.standardize | Rendered in Glue job | Usa funções de string Spark para normalização de corte, inferior, superior, espaço em branco e vazio como nulo. |
transform.derive | Rendered in Glue job | Usa expressões Spark SQL; O SQL multiplataforma complexo permanece como responsabilidade do chamador. |
transform.composite_keys | Rendered in Glue job | Usa Spark concat_ws e comportamento nulo para vazio de acordo com a semântica de chave composta do contrato principal. |
shape.parse_json | Rendered in Glue job | Requer um esquema concreto ou schema_ref resolvido; opcional cast_input: STRING é suportado. |
shape.arrays | Rendered in Glue job | Suporta size, to_json, first, explode e explode_outer; explosões de bronze que alteram a cardinalidade exigem permissão explícita. |
shape.columns | Rendered in Glue job | Suporta caminhos de coluna, aliases, conversões e expressões Spark SQL. |
shape.flatten | Rendered in Glue job | Usa um auxiliar de introspecção de esquema em tempo de execução e mantém os arrays intactos. |
transform.deduplicate | Rendered in Glue job | Requer keys e order_by determinísticos; renderiza uma janela Spark com row_number() == 1. |
O adaptador não deve renderizar uma tarefa Glue executável que ignore shape ou transform. Se seções não suportadas estiverem presentes, o renderizador emite um artefato .glue_job.todo.md.