

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# AWS HealthOmics alteração na disponibilidade da loja de variantes e da loja de anotações
<a name="variant-store-availability-change"></a>

Após uma análise cuidadosa, decidimos fechar lojas de AWS HealthOmics variantes e lojas de anotações para novos clientes a partir de 7 de novembro de 2025. Os clientes atuais podem continuar usando o serviço normalmente.

A seção a seguir descreve as opções de migração para ajudar você a migrar seus repositórios de variantes e de análises para novas soluções. Para qualquer dúvida ou preocupação, crie um caso de suporte em [support.console.aws.amazon.com](https://support.console.aws.amazon.com).

**Topics**
+ [Visão geral das opções de migração](#migrate-variant-store)
+ [Opções de migração para lógica ETL](#migrate-variant-store-etl-logic)
+ [Opções de migração para armazenamento](#migrate-variant-store-storage)
+ [Analytics](#migrate-variant-store-analytics)
+ [AWS Parceiros](#migrate-variant-store-partners)
+ [Exemplos](#migrate-variant-store-examples)

## Visão geral das opções de migração
<a name="migrate-variant-store"></a>

As opções de migração a seguir oferecem uma alternativa ao uso de armazenamentos de variantes e de anotações:

1. Use a [implementação HealthOmics de referência fornecida da lógica ETL](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/glue-variant-etl) em. GitHub 

   Use buckets de tabela do S3 para armazenamento e continue usando os serviços de AWS análise existentes. 

1. Crie uma solução usando uma combinação de AWS serviços existentes. 

   Para ETL, você pode escrever trabalhos personalizados do Glue ETL ou usar o código HAIL ou GLOW de código aberto no EMR para transformar dados variantes. 

   Use buckets de tabela do S3 para armazenamento e continue usando os serviços de análise existentes AWS 

1. Selecione um [AWS parceiro](https://aws.amazon.com/partners/work-with-partners/) que ofereça uma alternativa de armazenamento de variantes e anotações.

## Opções de migração para lógica ETL
<a name="migrate-variant-store-etl-logic"></a>

Considere as seguintes opções de migração para a lógica ETL:

1. HealthOmics fornece o código-fonte para o pipeline ETL do armazenamento de variantes como uma implementação de referência em GitHub. Você pode usar esse pipeline para alimentar o mesmo processo de ETL de dados variantes do armazenamento de variantes, mas com controle total sobre a lógica de ETL. Para obter mais informações, consulte [Glue Variant ETL ativado](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/glue-variant-etl). GitHub

1. Para transformar dados variantes, você pode escrever trabalhos personalizados do Glue ETL ou usar o código HAIL ou GLOW de código aberto no EMR.

## Opções de migração para armazenamento
<a name="migrate-variant-store-storage"></a>

*Como substituto do armazenamento de dados hospedado em serviços, você pode usar buckets de tabela do Amazon S3 para definir um esquema de tabela personalizado.Para obter mais informações sobre compartimentos de tabela, consulte Buquetes de tabela no Guia do usuário do Amazon [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html).*

Você pode usar baldes de mesa para tabelas Iceberg totalmente gerenciadas no Amazon S3.

Você pode criar um [caso de suporte](http://support.console.aws.amazon.com.) para solicitar que a HealthOmics equipe migre os dados do seu armazenamento de variantes ou anotações para o bucket de tabelas do Amazon S3 que você configurou. 

Depois que seus dados forem preenchidos no bucket de tabelas do Amazon S3, você poderá excluir seus armazenamentos de variantes e de anotações. Para obter mais informações, consulte [Excluindo lojas de HealthOmics análise](https://docs.aws.amazon.com/omics/latest/dev/deleting-a-store-examples.html). 

## Analytics
<a name="migrate-variant-store-analytics"></a>

[Para análise de dados, continue usando serviços de AWS análise, como [Amazon Athena](https://docs.aws.amazon.com/athena), Amazon [EMR, Amazon [Redshift](https://docs.aws.amazon.com/redshift) ou Amazon](https://docs.aws.amazon.com/emr) Quick.](https://docs.aws.amazon.com/quicksight)

## AWS Parceiros
<a name="migrate-variant-store-partners"></a>

Você pode trabalhar com um [AWS parceiro](https://aws.amazon.com/partners/work-with-partners/) que fornece ETL personalizável, esquemas de tabela, ferramentas integradas de consulta e análise e interfaces de usuário para interagir com dados. 

## Exemplos
<a name="migrate-variant-store-examples"></a>

Os exemplos a seguir mostram como criar tabelas adequadas para armazenar dados VCF e GVCF. 

### Athena DDL
<a name="migrate-variant-store-athena"></a>

Você pode usar o exemplo de DDL a seguir no Athena para criar uma tabela adequada para armazenar dados VCF e GVCF em uma única tabela. Esse exemplo não é o equivalente exato da estrutura de armazenamento de variantes, mas funciona bem para um caso de uso genérico. 

Crie seus próprios valores para DATABASE\_NAME e TABLE\_NAME ao criar a tabela.

```
 CREATE TABLE <DATABASE_NAME>. <TABLE_NAME> (
  sample_name string,
  variant_name string COMMENT 'The ID field in VCF files, '.' indicates no name',
  chrom string,
  pos bigint,
  ref string,
  alt array <string>,
  qual double,
  filter string,
  genotype string,
  info map <string, string>,
  attributes map <string, string>,
  is_reference_block boolean COMMENT 'Used in GVCF for non-variant sites')
PARTITIONED BY (bucket(128, sample_name), chrom)
LOCATION '{URL}/'
TBLPROPERTIES (
  'table_type'='iceberg',
  'write_compression'='zstd'
);
```

### Crie tabelas usando Python (sem Athena)
<a name="migrate-variant-store-python"></a>

O exemplo de código Python a seguir mostra como criar as tabelas sem usar o Athena.

```
 import boto3
from pyiceberg.catalog import Catalog, load_catalog
from pyiceberg.schema import Schema
from pyiceberg.table import Table
from pyiceberg.table.sorting import SortOrder, SortField, SortDirection, NullOrder
from pyiceberg.partitioning import PartitionSpec, PartitionField
from pyiceberg.transforms import IdentityTransform, BucketTransform
from pyiceberg.types import (
    NestedField,
    StringType,
    LongType,
    DoubleType,
    MapType,
    BooleanType,
    ListType
)


def load_s3_tables_catalog(bucket_arn: str) -> Catalog:
    session = boto3.session.Session()
    region = session.region_name or 'us-east-1'
    
    catalog_config = {
        "type": "rest",
        "warehouse": bucket_arn,
        "uri": f"https://s3tables.{region}.amazonaws.com/iceberg",
        "rest.sigv4-enabled": "true",
        "rest.signing-name": "s3tables",
        "rest.signing-region": region
    }
    
    return load_catalog("s3tables", **catalog_config)


def create_namespace(catalog: Catalog, namespace: str) -> None:
    try:
        catalog.create_namespace(namespace)
        print(f"Created namespace: {namespace}")
    except Exception as e:
        if "already exists" in str(e):
            print(f"Namespace {namespace} already exists.")
        else:
            raise e


def create_table(catalog: Catalog, namespace: str, table_name: str, schema: Schema, 
                partition_spec: PartitionSpec = None, sort_order: SortOrder = None) -> Table:
    if catalog.table_exists(f"{namespace}.{table_name}"):
        print(f"Table {namespace}.{table_name} already exists.")
        return catalog.load_table(f"{namespace}.{table_name}")
    
    create_table_args = {
        "identifier": f"{namespace}.{table_name}",
        "schema": schema,
        "properties": {"format-version": "2"}
    }
    
    if partition_spec is not None:
        create_table_args["partition_spec"] = partition_spec
    if sort_order is not None:
        create_table_args["sort_order"] = sort_order
    
    table = catalog.create_table(**create_table_args)
    print(f"Created table: {namespace}.{table_name}")
    return table


def main(bucket_arn: str, namespace: str, table_name: str):
    # Schema definition
    genomic_variants_schema = Schema(
        NestedField(1, "sample_name", StringType(), required=True),
        NestedField(2, "variant_name", StringType(), required=True),
        NestedField(3, "chrom", StringType(), required=True),
        NestedField(4, "pos", LongType(), required=True),
        NestedField(5, "ref", StringType(), required=True),
        NestedField(6, "alt", ListType(element_id=1000, element_type=StringType(), element_required=True), required=True),
        NestedField(7, "qual", DoubleType()),
        NestedField(8, "filter", StringType()),
        NestedField(9, "genotype", StringType()),
        NestedField(10, "info", MapType(key_type=StringType(), key_id=1001, value_type=StringType(), value_id=1002)),
        NestedField(11, "attributes", MapType(key_type=StringType(), key_id=2001, value_type=StringType(), value_id=2002)),
        NestedField(12, "is_reference_block", BooleanType()),
        identifier_field_ids=[1, 2, 3, 4]
    )
    
    # Partition and sort specifications
    partition_spec = PartitionSpec(
        PartitionField(source_id=1, field_id=1001, transform=BucketTransform(128), name="sample_bucket"),
        PartitionField(source_id=3, field_id=1002, transform=IdentityTransform(), name="chrom")
    )
    
    sort_order = SortOrder(
        SortField(source_id=3, transform=IdentityTransform(), direction=SortDirection.ASC, null_order=NullOrder.NULLS_LAST),
        SortField(source_id=4, transform=IdentityTransform(), direction=SortDirection.ASC, null_order=NullOrder.NULLS_LAST)
    )
    
    # Connect to catalog and create table
    catalog = load_s3_tables_catalog(bucket_arn)
    create_namespace(catalog, namespace)
    table = create_table(catalog, namespace, table_name, genomic_variants_schema, partition_spec, sort_order)
    
    return table


if __name__ == "__main__":
    bucket_arn = 'arn:aws:s3tables:<REGION>:<ACCOUNT_ID>:bucket/<TABLE_BUCKET_NAME'
    namespace = "variant_db"
    table_name = "genomic_variants"
    
    main(bucket_arn, namespace, table_name)
```