AWS Capability Parity
Este documento registra os recursos nativos do AWS pesquisados que devem informar o roteiro do adaptador contractforge-aws. Ele existe para evitar a subconstrução do adaptador AWS simplesmente porque um recurso não fazia parte de uma passagem de implementação anterior.
O adaptador deve buscar a semântica máxima de ContractForge que AWS pode preservar nativamente, enquanto ainda retorna REVIEW_REQUIRED ou UNSUPPORTED quando a equivalência semântica não for comprovada.
Tese Primária de Tempo de Execução
O tempo de execução principal do AWS permanece:
AWS Glue Spark
Apache Iceberg
AWS Glue Data Catalog
Amazon S3
AWS Lake Formation
Iceberg evidence tables
Este alvo é capaz de mais do que revisar artefatos:
- Glue oferece suporte a tabelas Apache Iceberg e gravações de DataFrame por meio do catálogo de dados Glue.
- As tabelas Iceberg suportam padrões de adição, criação/substituição e mesclagem SQL/DataFrame por meio de Spark.
- O Glue Data Quality fornece DQDL e uma transformação PySpark
EvaluateDataQuality. - Os filtros de dados Lake Formation suportam controles de acesso em nível de coluna, nível de linha e nível de célula para operações de leitura.
- Os marcadores de trabalho Glue fornecem rastreamento de origem incremental para JDBC e formatos S3 selecionados.
- Os conectores nativos e personalizados do Glue fornecem um destino de passagem nativo melhor do que escrever o código do conector SaaS dentro do ContractForge.
Matriz de paridade de tempo de execução
| ContractForge area | Capacidade nativa do AWS | Adapter target status | Implementation direction |
|---|---|---|---|
append | Iceberg append through Glue Spark/DataFrame writer | SUPPORTED | Script de tempo de execução gerado. Se a tabela de destino não existir, o trabalho a inicializa a partir do dataframe preparado antes de futuras execuções de acréscimos e aplica extensions.aws.iceberg.table_properties nesse caminho de criação. Mantenha a versão do formato da tabela e a configuração do catálogo explícitas. |
overwrite | Iceberg criar/substituir ou substituir padrões | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado com criação/substituição hoje e aplica extensions.aws.iceberg.table_properties; adicione substituição com reconhecimento de partição/escopo antes de reivindicar paridade total de produção. |
upsert | Spark SQL MERGE INTO against Iceberg | SUPPORTED | Script de tempo de execução gerado com proteções de chave de mesclagem. Se a tabela de destino não existir, o trabalho inicializa-a a partir do dataframe preparado e aplica extensions.aws.iceberg.table_properties antes de execuções futuras do MERGE. Precisa de teste de integração AWS para simultaneidade e grandes volumes de upsert. |
hash_diff_upsert | Hash staging plus Iceberg merge | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado: mescla merge_keys, calcula row_hash de hash_keys ou hash_strategy: all_columns_except, exclui colunas declaradas e geradas pelo usuário, pré-filtra linhas inalteradas antes de Iceberg MERGE e registra execuções sem alteração como SKIPPED/no_hash_changes. Se a tabela de destino não existir, o trabalho a inicializa a partir do dataframe preparado e aplica extensions.aws.iceberg.table_properties. O aviso de desempenho/simultaneidade permanece até ser validado no Glue. |
historical | Iceberg merge/history pattern | REVIEW_REQUIRED | Datações viáveis, mas eficazes, exclusões, políticas de chegada tardia e escritores simultâneos precisam de testes AWS explícitos. |
snapshot_reconcile_soft_delete | Full snapshot reconciliation plus Iceberg merge | REVIEW_REQUIRED | Viável somente quando a integridade da fonte e a simultaneidade do alvo forem comprovadas. |
required_columns | Qualidade de dados Glue ColumnExists via EvaluateDataQuality | SUPPORTED | Avaliado nativamente no trabalho; A gravidade do abort falha na execução, os resultados persistem para ctrl_ingestion_quality. |
not_null | Qualidade de dados Glue IsComplete via EvaluateDataQuality | SUPPORTED_WITH_WARNINGS | Avaliado nativamente; As regras warn registram evidências de qualidade e continuam; As regras quarantine em nível de linha gravam linhas incorretas em ctrl_ingestion_quarantine, descartam-nas antes da gravação de destino e atualizam as contagens de quarentena da execução. |
unique_key | Qualidade de dados Glue IsUnique/IsPrimaryKey via EvaluateDataQuality | SUPPORTED | Avaliado nativamente no trabalho; A gravidade do abort falha na execução, os resultados persistem para ctrl_ingestion_quality. |
accepted_values | Qualidade de dados Glue ColumnValues... in [...] via EvaluateDataQuality | SUPPORTED_WITH_WARNINGS | Avaliado nativamente; resultados não abortivos registram evidências de qualidade. quarantine em nível de linha grava linhas incorretas em ctrl_ingestion_quarantine, descarta-as antes da gravação de destino e as atualizações executam contagens de quarentena. |
max_null_ratio | Limite Glue de qualidade de dados Completeness via EvaluateDataQuality | SUPPORTED_WITH_WARNINGS | Avaliado nativamente; Resultados warn registrados como evidência de qualidade. |
Qualidade expression | Spark SQL DataFrame filter checks | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado fora do DQDL porque o dialeto da expressão é Spark SQL. abort falha na execução; warn registra evidências; quarantine em nível de linha grava linhas incorretas e as filtra antes da gravação de destino. |
select_columns | Spark DataFrame projection | SUPPORTED | Script de tempo de execução gerado. |
column_mapping | Spark DataFrame rename | SUPPORTED | Script de tempo de execução gerado com verificações de colisão. |
filter_expression | Spark SQL/DataFrame filter | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado; O dialeto da expressão é Spark SQL, portanto, filtros complexos de plataforma cruzada podem precisar de revisão. |
shape.parse_json | Spark from_json e estruturas de esquema | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado para esquemas concretos (e schema_ref resolvido), com cast_input: STRING e drop_source opcionais. |
shape.arrays.explode | Spark explode functions | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado para todos os modos (size/to_json/first/explode/explode_outer). explode/explode_outer são bloqueados em bronze, a menos que allow_cardinality_change_on_bronze; irmão explode sob a necessidade de um dos pais allow_cartesian. |
shape.zip_arrays | Spark arrays_zip plus transform field renaming | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado com colunas de matriz temporárias para que os caminhos aninhados mantenham nomes de campos de estrutura determinísticos. |
transform.cast | Spark DataFrame casts | SUPPORTED | Implement in AWS renderer before broad transform support. |
transform.standardize | Spark string functions | SUPPORTED | Implement trim/lower/upper/whitespace/null normalization. |
transform.derive | Spark SQL expressions | SUPPORTED_WITH_WARNINGS | Viável; o dialeto da expressão deve ser Spark SQL. |
transform.composite_keys | Spark concat/coalesce functions | SUPPORTED | Usa Spark concat_ws/coalesce com a semântica do delimitador do contrato principal. |
transform.deduplicate | Spark window/grouping | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado: Window.partitionBy(keys).orderBy(order_by) + row_number() == 1. order_by é exigido pelo contrato principal (determinístico); list-of-dicts e cláusulas simples de string de coluna são renderizadas, enquanto strings SQL de forma livre e inseguras tornam-se apenas para revisão. |
shape.flatten | Introspecção do esquema Spark + seleção | SUPPORTED_WITH_WARNINGS | Renderiza um auxiliar _cf_flatten de tempo de execução que expande campos de estrutura para colunas folha com o separador/incluir/excluir/max_depth do contrato (matrizes mantidas intactas). O Relationalize nativo do Glue não é usado porque ele dinamiza matrizes em quadros separados com nomenclatura fixa. |
shape.columns | Spark select projection | SUPPORTED | Script de tempo de execução gerado: a abreviação de string mapeia um caminho para um alias; o formato do objeto suporta expression (Spark SQL), cast e alias. |
incremental_files | Marcadores de trabalho Glue para formatos S3 selecionados ou estado de evidência | SUPPORTED_WITH_WARNINGS | Renderiza um marcador S3 create_dynamic_frame.from_options lido com transformation_ctx para JSON/CSV/Parquet/ORC/Avro/XML. As opções CSV portáteis são traduzidas para opções Glue DynamicFrame (header -> withHeader, delimiter -> separator) e opções somente Spark, como inferSchema, não são passadas para leituras de marcadores Glue. enable_job_bookmark conecta --job-bookmark-option. Os formatos não suportados permanecem apenas para revisão. |
| JDBC incremental | Marcadores de trabalho Glue para chaves de marcadores JDBC | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado quando source.incremental.watermark_column é uma coluna simples e o JDBC URL/conector é mapeado para um tipo de conexão Glue JDBC; caso contrário, ele retornará ao leitor Spark JDBC mais aos predicados/estado de evidência da marca d'água principal. |
| evidência estadual | Iceberg state tables in Glue Catalog | SUPPORTED_WITH_WARNINGS | Os trabalhos Glue gerados atualizam o ctrl_ingestion_state após gravações confirmadas com ID de execução, status, linhas gravadas, ID de instantâneo Iceberg e candidatos de marca d'água em lote quando a coluna de marca d'água declarada existe no DataFrame preparado. O progresso do ponto de verificação de streaming é rastreado no ctrl_ingestion_streams. |
| evidência de mudança de esquema | Tabela de alteração de esquema Iceberg no catálogo Glue | SUPPORTED_WITH_WARNINGS | As tarefas Glue geradas comparam o esquema da tabela de destino antes/depois da gravação, acrescentam colunas adicionadas e linhas de alteração de tipo ao ctrl_ingestion_schema_changes e copiam o resumo na evidência de execução. Decisões complexas de políticas de esquema ainda exigem revisão. |
kafka_bounded / eventhubs_bounded | Spark bounded Kafka/Event Hubs read in Glue | SUPPORTED_WITH_WARNINGS | Script de tempo de execução gerado; os jars do conector Spark correspondentes devem ser fornecidos e a semântica de deslocamento/intervalo permanece de propriedade do conector. |
kafka_available_now / eventhubs_available_now | Streaming estruturado Glue com o gatilho availableNow | SUPPORTED_WITH_WARNINGS | Renderiza um trabalho readStream + writeStream.foreachBatch com trigger(availableNow=True) e o checkpoint_location do contrato; preparação/qualidade/gravação executada por microlote para modos de acréscimo/mesclagem. A evidência por lote é gravada no ctrl_ingestion_streams e transformada na evidência de execução final. Valide o progresso do deslocamento/ponto de verificação antes da produção. |
| row filters | Lake Formation data filters | REVIEW_REQUIRED | Renderiza uma estrutura CreateDataCellsFilter (expressão de linha false com falha fechada) mais uma concessão SELECT no filtro; a função de filtro de linha não pode ser traduzida automaticamente para um LF FilterExpression, portanto, um revisor a conclui. O planejamento permanece REVIEW_REQUIRED. |
| column masks | Lake Formation column/cell filters | REVIEW_REQUIRED | Renderiza uma estrutura de filtro de células de dados que exclui a coluna mascarada (segurança em nível de coluna); LF não tem função de mascaramento de valor, portanto, um valor transformado deve vir do trabalho de ingestão ou de uma visão do consumidor. O planejamento permanece REVIEW_REQUIRED. |
| concessões de acesso | Concessões Lake Formation e políticas IAM | SUPPORTED_WITH_WARNINGS | render_aws_lake_formation_plan emite solicitações GrantPermissions aplicáveis (.lakeformation.json), além de evidência ctrl_ingestion_access SQL. As permissões de função de trabalho de gravação são separadas das concessões ao consumidor. |
| anotações | AWS Glue Metadados de tabela/coluna do catálogo | SUPPORTED_WITH_WARNINGS | Renderiza .annotations.json com alterações planejadas de metadados glue:UpdateTable e .annotations_evidence.sql para ctrl_ingestion_annotations. A aplicação permanece explícita porque as atualizações da tabela Glue devem preservar o TableInput atual completo. |
| metadados de operações | Tabela de evidências Iceberg no catálogo Glue | SUPPORTED | Renderiza .operations.json e .operations.sql normalizados para ctrl_ingestion_operations, preservando proprietários, grupos, criticidade, SLA, sinalizadores de alerta, runbook e tags. |
| metadados/linhagem de origem | Glue JobRun, metadados de esquema Spark, exportação OpenLineage opcional | SUPPORTED_WITH_WARNINGS | As tarefas Glue geradas persistem metadados de origem, leitura de linhas, contagem de colunas de origem e esquema de origem de tempo de execução para ctrl_ingestion_metadata e, em seguida, anexa eventos compatíveis com OpenLineage a ctrl_ingestion_lineage. Catálogo Glue O enriquecimento API continua sendo um trabalho futuro de propriedade do adaptador. |
| cost signals | Glue DPUSeconds, tipo/contagem de trabalhadores e duração do trabalho | SUPPORTED | A reconciliação mapeia Glue DPUSeconds em ctrl_ingestion_cost; *.cost.sql estima USD somente quando uma taxa explícita de DPU-hora é fornecida. |
http_file (http_csv/json/text) | Driver-side bounded fetch + Spark in-memory parse | SUPPORTED_WITH_WARNINGS | O auxiliar _cf_http_dataframe de tempo de execução valida o host resolvido (rejeita private/IMDS) e recusa redirecionamentos; segredos de autenticação são resolvidos por meio do Secrets Manager. |
rest_api | Cliente REST limitado por núcleo compartilhado | SUPPORTED_WITH_WARNINGS | O trabalho Glue chama contractforge_core.connectors.read_rest_api_records (paginação/autenticação/limites, implementado em contractforge_core.connectors.api.rest); requer contractforge-core no trabalho. O cliente compartilhado valida URLs de token API e OAuth, rejeita esquemas/hosts privados não suportados por padrão e recusa redirecionamentos. Os segredos são resolvidos por meio do Secrets Manager. |
delta_share | Spark Delta Sharing reader | SUPPORTED_WITH_WARNINGS | spark.read.format('deltaSharing'); forneça o jar delta-sharing-spark. |
| passagem nativa | Conectores nativos Glue, conectores personalizados, padrões AppFlow/DMS | REVIEW_REQUIRED | Renderiza .native_passthrough.json com recomendações nativas de AWS e candidatos em formato API somente de revisão para AppFlow CreateFlow, DMS CreateReplicationConfig e Glue CreateConnection. Não implemente algoritmos SaaS em ContractForge. |
Recommended Implementation Order
-
Preparation parity
- Keep
transform.cast,transform.standardize,transform.derive,transform.composite_keyscovered by AWS Glue script tests. - Adicione
transform.deduplicateapenas com validação de ordem determinística. Concluído: a geração do tempo de execução requerkeyseorder_bye, em seguida, renderiza uma janela Spark erow_number() == 1. - Adicione
shape.parse_jsonpara esquemas concretos antes da explosão do array. Concluído: a geração de tempo de execução suporta esquemas concretos/schema_refresolvido,cast_input: STRINGopcional, matrizes, matrizes zip, colunas e nivelamento com guarda-corpos.
- Keep
-
Qualidade nativa AWS
- Renderize artefatos DQDL para todas as regras de qualidade portáteis com equivalentes fiéis do DQDL. Concluído:
render_aws_quality_dqdlemite um conjunto de regrasRules = [...](artefato.quality.dqdl) mapeandorequired_columns/not_null/unique_key/accepted_values/row_count_minimum/max_null_ratio; As regrasexpressionsão avaliadas pelas verificações de tempo de execução Spark SQL em vez de DQDL. - Adicione um caminho de tempo de execução do Data Quality Glue (
EvaluateDataQuality). Concluído: o trabalho avalia o conjunto de regras DQDL no trabalho, particionado por gravidade — as regrasabortaumentam em caso de falha, as regraswarn/quarantinecontinuam. - Persista os resultados do DQ nas tabelas de evidências ContractForge. Concluído: uma linha imutável por regra é anexada ao
ctrl_ingestion_quality(_cf_persist_quality_evidence) compartilhando o_cf_run_idda execução. - Habilite o comportamento de tempo de execução de quarentena/aviso. Feito para regras de nível de linha mapeadas: regras de não interrupção são registradas e nunca falham na execução; As regras de quarentena
not_nulleaccepted_valuesusamrowLevelOutcomespara gravar linhas incorretas emctrl_ingestion_quarantinee filtrá-las antes da gravação de destino. Spark As regras de quarentena de expressão SQL usam filtros DataFrame para o mesmo comportamento de evidência. As regras de quarentena agregadas/esquemáticas permanecem apenas como evidências registradas.
- Renderize artefatos DQDL para todas as regras de qualidade portáteis com equivalentes fiéis do DQDL. Concluído:
-
Incremental ingestion
- Renderize a configuração do marcador Glue para fontes S3/JDBC elegíveis. Concluído: arquivos incrementais S3 e fontes incrementais JDBC elegíveis renderizam leituras de marcadores DynamicFrame e ativam o sinalizador de implantação de marcadores de trabalho.
- Registre a estratégia incremental selecionada no estado/evidência.
- Fallback para tabelas de estado ContractForge quando os marcadores não conseguem preservar a semântica.
-
Governança
- Gere filtro de dados Lake Formation e conceda artefatos. Concluído:
render_aws_lake_formation_planemite solicitaçõesGrantPermissionse scaffoldsCreateDataCellsFilter(.lakeformation.json). - Keep application behind explicit apply commands.
- Registrar evidências de aplicação de governança.
- Gere filtro de dados Lake Formation e conceda artefatos. Concluído:
-
Modos de gravação avançados
- Implemente
hash_diff_upsertcom preparação de propriedade do adaptador. Concluído: a geração em tempo de execução calcula um hash de linha compatível com o núcleo e mescla apenas as linhas alteradas. - Protótipo
historicalesnapshot_reconcile_soft_deleteem testes de integração antes de alterar o status de planejamento.
- Implemente
-
Passagem nativa
- Adicione artefatos de conector nativo Glue para sistemas SaaS compatíveis.
- Adicione artefatos de revisão/aplicação do AppFlow/DMS onde esses serviços preservam a intenção do contrato melhor do que o código Glue.
Known AWS Constraints To Preserve
- Os filtros Lake Formation aplicam-se ao acesso de leitura. Eles não são a mesma coisa que rejeição de linha no tempo de gravação ou funções de tabela do lado do mecanismo.
- Os marcadores de trabalho Glue rastreiam o progresso da origem; eles não limpam ou reconciliam os dados de destino durante o retrocesso/redefinição.
- Os marcadores JDBC dependem de chaves de marcadores adequadas e não suportam colunas de marcadores que diferenciam maiúsculas de minúsculas.
- O Glue Data Quality pode avaliar conjuntos de regras avançados, mas a quarentena em nível de linha ContractForge só é habilitada onde Glue
rowLevelOutcomespode identificar linhas incorretas sem alterar a semântica da regra. - O suporte ao Iceberg varia de acordo com a versão do Glue. O adaptador deve manter a versão Glue na configuração e evidência de tempo de execução.
- AWS As dependências SDK ficam fora do caminho de importação do adaptador base. Os auxiliares de tempo de execução podem usar
contractforge-aws[runtime]ou clientes fornecidos pelo chamador.
Official References
- AWS Glue Iceberg support: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-iceberg.html
- AWS Glue job bookmarks: https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html
- AWS Glue JDBC connections: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect-jdbc-home.html
- AWS Glue Qualidade de dados: https://docs.aws.amazon.com/glue/latest/dg/glue-data-quality.html
- AWS Glue DQDL reference: https://docs.aws.amazon.com/glue/latest/dg/dqdl.html
- AWS Glue
EvaluateDataQuality: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality.html - Lake Formation data filters: https://docs.aws.amazon.com/lake-formation/latest/dg/data-filtering.html
- Conectores AWS Glue: https://docs.aws.amazon.com/glue/latest/dg/connectors-chapter.html
- Anúncio de conectores corporativos nativos AWS Glue: https://aws.amazon.com/about-aws/whats-new/2024/11/aws-glue-connectivity-19-native-connectors-enterprise-applications/