

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS HealthOmics cambio en la disponibilidad del almacén de variantes y del almacén de anotaciones
<a name="variant-store-availability-change"></a>

Tras pensarlo detenidamente, decidimos cerrar las tiendas de AWS HealthOmics variantes y las tiendas de anotaciones a los nuevos clientes a partir del 7 de noviembre de 2025. Los clientes existentes pueden seguir utilizando el servicio con normalidad.

En la siguiente sección, se describen las opciones de migración para ayudarte a migrar tus tiendas de variantes y tiendas de análisis a nuevas soluciones. Si tienes alguna pregunta o duda, crea un caso de soporte en [support.console.aws.amazon.com](https://support.console.aws.amazon.com).

**Topics**
+ [Descripción general de las opciones de migración](#migrate-variant-store)
+ [Opciones de migración para la lógica ETL](#migrate-variant-store-etl-logic)
+ [Opciones de migración para el almacenamiento](#migrate-variant-store-storage)
+ [Análisis](#migrate-variant-store-analytics)
+ [AWS Socios](#migrate-variant-store-partners)
+ [Ejemplos](#migrate-variant-store-examples)

## Descripción general de las opciones de migración
<a name="migrate-variant-store"></a>

Las siguientes opciones de migración ofrecen una alternativa al uso de almacenes de variantes y almacenes de anotaciones:

1. Utilice la [implementación HealthOmics de referencia de la lógica ETL](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/glue-variant-etl) proporcionada en. GitHub 

   Utilice los cubos de tablas de S3 como almacenamiento y siga utilizando los servicios de AWS análisis existentes. 

1. Cree una solución mediante una combinación de los AWS servicios existentes. 

   Para ETL, puedes escribir trabajos ETL de Glue personalizados o usar código HAIL o GLOW de código abierto en EMR para transformar los datos de variantes. 

   Utilice los cubos de tablas de S3 para almacenar y siga utilizando los servicios de análisis existentes AWS 

1. Seleccione un [AWS socio](https://aws.amazon.com/partners/work-with-partners/) que ofrezca una variante y una alternativa al almacén de anotaciones.

## Opciones de migración para la lógica ETL
<a name="migrate-variant-store-etl-logic"></a>

Tenga en cuenta las siguientes opciones de migración para la lógica de ETL:

1. HealthOmics proporciona el código fuente de la canalización ETL del almacén de variantes como implementación de referencia en GitHub. Puede utilizar esta canalización para impulsar el mismo proceso de ETL de datos de variantes que el almacén de variantes, pero con un control total sobre la lógica de ETL. Para obtener más información, consulte [Glue Variant ETL](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/glue-variant-etl) on GitHub.

1. Para transformar los datos de variantes, puedes escribir trabajos ETL de Glue personalizados o usar código HAIL o GLOW de código abierto en EMR.

## Opciones de migración para el almacenamiento
<a name="migrate-variant-store-storage"></a>

*Como reemplazo del almacén de datos hospedado en un servicio, puede utilizar los cubos de tablas de Amazon S3 para definir un esquema de tablas personalizado. Para obtener más información sobre los cubos de tablas, consulte los cubos de tablas [en](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html) la Guía del usuario de Amazon S3.*

Puede usar cubos de tablas para tablas Iceberg totalmente administradas en Amazon S3.

Puede plantear un [caso de soporte](http://support.console.aws.amazon.com.) para solicitar al HealthOmics equipo que migre los datos de su almacén de variantes o anotaciones al depósito de tablas de Amazon S3 que haya configurado. 

Una vez que los datos se hayan rellenado en el depósito de tablas de Amazon S3, puede eliminar los almacenes de variantes y los almacenes de anotaciones. Para obtener más información, consulta [Eliminar almacenes HealthOmics de análisis](https://docs.aws.amazon.com/omics/latest/dev/deleting-a-store-examples.html). 

## Análisis
<a name="migrate-variant-store-analytics"></a>

[Para el análisis de datos, siga utilizando servicios de AWS análisis, como [Amazon Athena](https://docs.aws.amazon.com/athena), Amazon [EMR, Amazon [Redshift](https://docs.aws.amazon.com/redshift) o Amazon](https://docs.aws.amazon.com/emr) Quick.](https://docs.aws.amazon.com/quicksight)

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

Puede trabajar con un [AWS socio](https://aws.amazon.com/partners/work-with-partners/) que proporcione ETL personalizable, esquemas de tablas, herramientas integradas de consulta y análisis e interfaces de usuario para interactuar con los datos. 

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

Los siguientes ejemplos muestran cómo crear tablas adecuadas para almacenar datos de VCF y GVCF. 

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

Puede usar el siguiente ejemplo de DDL en Athena para crear una tabla adecuada para almacenar datos de VCF y GVCF en una sola tabla. Este ejemplo no es el equivalente exacto de la estructura de almacenamiento de variantes, pero funciona bien para un caso de uso genérico. 

Crea tus propios valores para DATABASE\_NAME y TABLE\_NAME al crear la tabla.

```
 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'
);
```

### Crear tablas con Python (sin Athena)
<a name="migrate-variant-store-python"></a>

El siguiente ejemplo de código de Python muestra cómo crear las tablas sin usar 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)
```