Richieste di dati di volo

È possibile definire l'accesso a una risorsa di dati utilizzando oggetti di metadati denominati "richieste di dati". Una richiesta di dati è la rappresentazione del formato generico open source pyarrow.flight.FlightDescriptor. Si tratta di un documento di metadati che descrive una richiesta di recupero o generazione di un insieme di dati. La richiesta di dati può contenere credenziali o proprietà di connessione, oppure può fare riferimento a un ID di risorsa dati o a un ID di connessione.

Nei notebook è possibile utilizzare il codice generato per caricare i dati da un'origine dati. Il codice generato che viene aggiunto a una cella del notebook è un metodo che ti aiuta a lavorare con i dati provenienti da una fonte di dati.

Il codice generato utilizza un oggetto ` Flight service `, basato su ` Apache Arrow Flight`, per comunicare con un file, una connessione a un database o una risorsa di dati collegata (dati accessibili tramite una connessione) durante il caricamento dei dati in una struttura di dati.

Utilizzando una richiesta di dati di volo, è possibile specificare l'origine dei dati e le proprietà interattive per le richieste di lettura o scrittura.

Le sezioni seguenti forniscono ulteriori dettagli sulla sintassi e sulle proprietà delle richieste di dati di volo per l' Flight service.

Sintassi e proprietà delle richieste di dati

Per scoprire quali proprietà di interazione sono supportate da ciascun connettore, consultare l'API Data and AI Common Core. È inoltre possibile richiamare v2/datasources_types l'endpoint per i tipi di origine dati definiti nell'elenco delle API comuni per dati e IA.

Una richiesta di dati ha la seguente struttura. Le richieste di dati effettive, in genere, non includono tutte le proprietà elencate e potrebbero utilizzare altre proprietà di interazione specifiche di una determinata fonte di dati.

Esempio di richiesta a /v2/datasource_types:

curl --request GET --url 'https://<host:port>/v2/datasource_types?connection_properties=true&interaction_properties=true' --header 'Accept: application/json' --header 'Authorization: Bearer ${TOKEN}'

Esempio di richiesta a /v2/connections:

curl --request GET --url 'https://<host:port>/v2/connections?entity.name=<your_connection_name>' --header 'Accept: application/json' --header 'Authorization: Bearer ${TOKEN}'

Sintassi dell'oggetto di richiesta dati

La seguente richiesta di dati mostra la sintassi nella notazi Python. La descrizione vale anche per R.

data_request = {

    # The Flight Service expects assets to be identified by their GUID.
    # "asset_id" is the ID of connected data asset or a connection asset.
    "asset_id": "ASSET_GUID",
    "project_id|space_id|catalog_id": "GUID",

    # itc_utils.flight_service adds support for using asset names
    # use either one of ...
    "data_name" : "name of a plain data asset",
    "connection_name" : "name of a connection asset",
    "connected_data_name" : "name of a 'connected data' asset",
    # by default the assets will be looked up in the current project
    # itc_utils will set "asset_id" from the provided name.

    # "asset_id" and "connection_properties" are mutually exclusive
    "connection_properties": { # optional
        # not needed in most cases
    },

    "interaction_properties": {
        # commonly used properties, all optional
        "file_name" : "file in a connected data source",
        "schema_name" : "schema of a table in a connected database",
        "table_name" : "name of a table in a connected database",
        "row_limit" : NROWS,
        "infer_schema" : false|true,
        "invalid_data_handling" : "fail|row|column",
        ...
    },
    "fields": [...] # optional
    "num_partitions": N, # optional
    "batch_size": NROWS, # optional
    "commit_frequency" : NROWS # optional

}

Proprietà, valori e descrizioni supportati

Proprietà Valore Descrizione
asset_id L'identificatore univoco globale (GUID) di una risorsa dati, di una risorsa di connessione o di una risorsa dati connessa nel progetto, nel catalogo o nello spazio di distribuzione.
batch_size Un numero intero positivo non superiore a 100000. Il valore predefinito è 10000. Flight legge le righe dai database a blocchi, gestiti internamente in oggetti di tipo RecordBatch. Il batch_size imposta il numero di righe da leggere dalla fonte per ogni blocco. Impostare una dimensione del lotto troppo bassa può ridurre le prestazioni, poiché comporta una lettura troppo frequente dalla fonte.
commit_frequency Un valore valido è compreso tra 100 e 100.000. Il valore predefinito è 100. Esegue automaticamente il commit della transazione del database dopo aver scritto n le righe. Da utilizzare solo quando si scrivono dati in un database SQL.
connection_properties Nella maggior parte dei casi non vengono connection_properties utilizzati, soprattutto nei computer portatili, dove il loro impiego connection_properties può aumentare il rischio di fuga delle credenziali. Si utilizza connection_properties questa opzione se non sono state aggiunte risorse di progetto, ma si desidera accedere ai dati di una fonte di dati esterna o scrivervi. Se i dati si trovano in una fonte di dati esterna, specificare le proprietà della connessione in una risorsa di connessione e fare riferimento a tale connessione nella richiesta di dati.
interaction_properties interaction_properties Dipende dal tipo di fonte dei dati. Per un elenco delle proprietà supportate per ciascuna origine dati, consultare l'elenco [Tipi di origini dati dell'API Common Core per dati e IA], che definisce i tipi di origini dati.
interaction_properties.row_limit Il valore può essere un numero positivo. Se la proprietà row_limit non è specificata, verranno lette tutte le righe. Questa proprietà limita il numero di righe lette dall'origine. In genere, quando si analizzano i dati è possibile iniziare con un limite. Altrimenti, il runtime potrebbe esaurire la memoria. Se si imposta questo valore row_limit , di solito qualsiasi valore specificato per num_partitions viene ignorato e viene utilizzato invece il valore predefinito 1.
interaction_properties.infer_schema Un valore booleano per richiedere che l' Flight service i un tipo. Il valore predefinito è False. Alcune fonti di dati, come i file di tipo « CSV », non specificano i tipi di dati delle colonne. Per impostazione predefinita, tutte le colonne saranno trattate come stringhe. È possibile passare "infer_schema": true e l' Flight service leggerà il file e cercherà di individuare i formati dei campi nel modo più accurato possibile. Flight service legge solo le prime 1000 righe, quindi potrebbe trarre conclusioni errate se un campo non presenta una buona varietà delle proprietà disponibili in quelle prime 1000 righe. Ad esempio, se nelle prime 1000 righe vengono rilevati valori pari a 0 o 1, Flight potrebbe dedurre che una colonna sia di tipo booleano, mentre in realtà dovrebbe essere di tipo intero, poiché nelle righe successive sono presenti valori superiori a 1.
interaction_properties.invalid_data_handling Uno tra fail o row o column. Il valore predefinito è fail. Definisce come gestire i valori non validi, ad esempio interrompendo il processo, impostando la colonna su null o eliminando la riga.
num_partitions Un numero intero positivo. Il valore predefinito è 1. Alcune fonti di dati consentono di accedere ai dati tramite più endpoint. Questa tecnica può essere utilizzata per leggere più flussi in thread paralleli. Il valore di num_partitions indica il numero di endpoint che l' Flight service e dovrebbe fornire al client. Il valore di num_partitions viene ignorato se l'origine dati non supporta più endpoint. Il valore potrebbe anche essere ignorato se è in conflitto con altri attributi, come ad esempio row_limit.
project_id Il GUID del tuo progetto.
fields fields sono definite come un elenco di dizionari, che devono includere, come minimo, le name proprietà type e. Per ulteriori informazioni su fields, consultare la sezione fields proprietà.
Viene utilizzato durante la lettura dei dati, ma non durante la scrittura.

fields Proprietà

La fields proprietà elenca i campi, detti anche colonne, da selezionare da un'origine dati. Quando si legge da un file in formato « CSV » o delimitato, questo elenco di campi definisce i nomi e i tipi dei campi presenti nel file. La disposizione dei valori nel file deve corrispondere esattamente all'elenco dei campi. Ogni campo deve specificare sia il nome che il tipo di dati.

I valori supportati per type l'attributo in fields sono (i nomi non distinguono tra maiuscole e minuscole): ARRAY, BIGINT, BINARY, BIT, BLOB, BOOLEAN, CHAR, CLOB, DATALINK, DATE, DECIMAL, DISTINCT, DOUBLE, FLOAT, INTEGER, JAVA_OBJECT, LONGNVARCHAR, LONGVARBINARY, LONGVARCHAR, NCHAR, NCLOB, NULL, NUMERIC, NVARCHAR, OTHER, REAL, REF, REF_CURSOR, ROWID, SMALLINT, SQLXML, STRUCT, TIME, TIME_WITH_TIMEZONE, TIMESTAMP, TIMESTAMP_WITH_TIMEZONE, TINYINT, VARBINARY, VARCHAR, VECTOR
I valori type dell'attributo in fields sono i nomi utilizzati dall' Flight service e. Quando i dati vengono letti, questi tipi vengono mappati ai tipi di dati utilizzati nell' Arrow Flight open source. Per ulteriori informazioni, consultare la sezione "Tipi di dati e modello di dati in memoria". Ad esempio, TINYINT viene mappato su int8() e BIGINT su int64().

Tuttavia, con alcune origini dati, ad esempio quando si legge da un file Parquet o da una tabella in un database SQL esterno, l'elenco dei campi può specificare un sottoinsieme delle colonne da leggere dall'origine.

Flight service non leggerà le altre rubriche. Per impostazione predefinita, verrebbero recuperate tutte le colonne della tabella. Ogni campo deve specificare sia il nome che il tipo di dati. Il tipo può sovrascrivere il tipo della colonna nella tabella esterna. Ad esempio, una colonna memorizzata come VARCHAR(10) può essere mappata su bigint in Flight. Questa fields proprietà non viene utilizzata durante la scrittura nel database; al suo posto, Flight service utilizza lo schema fornito in do_put(...). L'esempio seguente mostra come utilizzare la fields proprietà nella notazione Python. Tuttavia, la descrizione vale anche per R.

```json {: .codeblock}
    "fields": [{"name":"a","type":{"type":"bigint"}},
           {"name":"b","type":{"type":"varchar"}}
          ]
```
: Il valore dell'attributo «type» è un altro dizionario contenente un altro attributo «type».

Se la fields proprietà è specificata nella richiesta di dati, la infer_schema proprietà viene implicitamente impostata su false poiché la fields proprietà definisce già i tipi di dati.

:

Se utilizzi pandas DataFrames e desideri verificare la corrispondenza tra i tipi di dati in Flight e pandas, consulta la sezione "Differenze tra i tipi".

La fields proprietà specifica il nome e il tipo di dati di una colonna, oltre ad altri dettagli. L'esempio seguente mostra la struttura del fields modello nella notazione Python. Tuttavia, la descrizione vale anche per R.

{
    "name": "fieldname",
    "type": {
        "type": "typename",
        "length": L ,     # integer, depends on type
        "scale": S,       # integer depends on type, only numeric and decimal
        "signed": true or false   # for numeric types
    }
}

La combinazione di length e scale definisce la precisione e la scala di un tipo di dati numerico o decimale.

La proprietà signed influisce sul tipo e sull'intervallo dei valori considerati validi.

  • {"type":"TINYINT","signed":true} è mappato al tipo int8() in Flight. I valori validi sono -128 <= signed tinyint <= 127.
  • {"type":"TINYINT","signed":False} è mappato al tipo uint8() in Flight. I valori validi sono 0 <= unsigned tinyint <= 255. |

Ulteriori informazioni