

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# AWS HealthOmics modifica della disponibilità dell'archivio delle varianti e dell'archivio delle annotazioni
<a name="variant-store-availability-change"></a>

Dopo un'attenta valutazione, abbiamo deciso di chiudere i negozi di AWS HealthOmics varianti e i negozi di annotazioni a nuovi clienti a partire dal 7 novembre 2025. I clienti esistenti possono continuare a utilizzare il servizio normalmente.

La sezione seguente descrive le opzioni di migrazione per aiutarti a spostare i tuoi negozi di varianti e i negozi di analisi verso nuove soluzioni. Per qualsiasi domanda o dubbio, crea una richiesta di supporto all'indirizzo [support.console.aws.amazon.com](https://support.console.aws.amazon.com).

**Topics**
+ [Panoramica delle opzioni di migrazione](#migrate-variant-store)
+ [Opzioni di migrazione per la logica ETL](#migrate-variant-store-etl-logic)
+ [Opzioni di migrazione per lo storage](#migrate-variant-store-storage)
+ [Analisi](#migrate-variant-store-analytics)
+ [AWS Partner](#migrate-variant-store-partners)
+ [Esempi](#migrate-variant-store-examples)

## Panoramica delle opzioni di migrazione
<a name="migrate-variant-store"></a>

Le seguenti opzioni di migrazione offrono un'alternativa all'utilizzo degli archivi di varianti e degli archivi di annotazioni:

1. Utilizzate l'[implementazione HealthOmics di riferimento fornita dalla logica ETL su.](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/glue-variant-etl) GitHub 

   Usa i bucket di tabella S3 per l'archiviazione e continua a utilizzare i servizi di analisi esistenti. AWS 

1. Crea una soluzione utilizzando una combinazione di servizi esistenti AWS . 

   Per ETL, puoi scrivere lavori Glue ETL personalizzati o utilizzare codice HAIL o GLOW open source su EMR per trasformare i dati delle varianti. 

   Usa i table bucket S3 per l'archiviazione e continua a utilizzare i servizi di analisi esistenti AWS 

1. Seleziona un [AWS partner](https://aws.amazon.com/partners/work-with-partners/) che offra una variante e un'alternativa all'annotation store.

## Opzioni di migrazione per la logica ETL
<a name="migrate-variant-store-etl-logic"></a>

Considerate le seguenti opzioni di migrazione per la logica ETL:

1. HealthOmics fornisce il codice sorgente per la pipeline ETL del negozio di varianti come implementazione di riferimento su. GitHub È possibile utilizzare questa pipeline per alimentare lo stesso processo ETL dei dati delle varianti dell'archivio delle varianti, ma con il pieno controllo sulla logica ETL. Per ulteriori informazioni, vedere [Glue Variant ETL](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/glue-variant-etl) on GitHub.

1. Per trasformare i dati delle varianti, puoi scrivere lavori Glue ETL personalizzati o utilizzare codice HAIL o GLOW open source su EMR.

## Opzioni di migrazione per lo storage
<a name="migrate-variant-store-storage"></a>

*In sostituzione dell'archivio dati ospitato nel servizio, puoi utilizzare i bucket di tabella Amazon S3 per definire uno schema di tabella personalizzato. Per ulteriori informazioni sui table bucket, consulta Table bucket nella Amazon S3 User [Guide](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html).*

Puoi usare i table bucket per tabelle Iceberg completamente gestite in Amazon S3.

Puoi presentare una richiesta di [supporto](http://support.console.aws.amazon.com.) per richiedere al HealthOmics team di migrare i dati dalla tua variante o dall'archivio di annotazioni al bucket di tabelle Amazon S3 che hai configurato. 

Dopo aver inserito i dati nel bucket di tabelle Amazon S3, puoi eliminare gli archivi di varianti e gli archivi di annotazioni. [Per ulteriori informazioni, consulta Eliminazione degli archivi di analisi. HealthOmics ](https://docs.aws.amazon.com/omics/latest/dev/deleting-a-store-examples.html) 

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

[Per l'analisi dei dati, continua a utilizzare servizi di AWS analisi come [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 Partner
<a name="migrate-variant-store-partners"></a>

Puoi collaborare con un [AWS partner](https://aws.amazon.com/partners/work-with-partners/) che fornisce ETL personalizzabili, schemi di tabelle, strumenti di query e analisi integrati e interfacce utente per l'interazione con i dati. 

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

Gli esempi seguenti mostrano come creare tabelle adatte alla memorizzazione di dati VCF e GVCF. 

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

È possibile utilizzare il seguente esempio DDL in Athena per creare una tabella adatta alla memorizzazione di dati VCF e GVCF in un'unica tabella. Questo esempio non è l'esatto equivalente della struttura dell'archivio delle varianti, ma funziona bene per un caso d'uso generico. 

Crea i tuoi valori per DATABASE\$1NAME e TABLE\$1NAME quando crei la tabella.

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

### Crea tabelle usando Python (senza Athena)
<a name="migrate-variant-store-python"></a>

Il seguente esempio di codice Python mostra come creare le tabelle senza usare 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)
```