Solicitações de dados de voo

Você pode definir o acesso a um ativo de dados usando objetos de metadados chamados solicitações de dados. Uma solicitação de dados é a representação do formato genérico de código pyarrow.flight.FlightDescriptoraberto. Trata-se de um documento de metadados que descreve uma solicitação para recuperar ou gerar um conjunto de dados. A solicitação de dados pode conter credenciais ou propriedades de conexão, ou pode indicar um ID de ativo de dados conectado ou um ID de conexão.

Nos notebooks, você pode usar código gerado para carregar dados de uma fonte de dados. O código gerado que é adicionado a uma célula do notebook é um método para ajudá-lo a trabalhar com dados de uma fonte de dados.

O código gerado utiliza o ` Flight service `, baseado no ` Apache Arrow Flight`, para se comunicar com um arquivo, uma conexão de banco de dados ou um ativo de dados conectado (dados acessíveis por meio de uma conexão) ao carregar dados em uma estrutura de dados.

Ao utilizar uma solicitação de dados de voo, é possível especificar a fonte de dados e as propriedades interativas para solicitações de leitura ou gravação.

As seções a seguir fornecem mais detalhes sobre a sintaxe e as propriedades das solicitações de dados de voo para o serviço Flight service.

Sintaxe e propriedades da solicitação de dados

Para saber quais propriedades de interação são suportadas por cada conector, consulte a API Data and AI Common Core. Você também pode chamar o v2/datasources_types endpoint para acessar os tipos de fonte de dados definidos na lista da API Data and AI Common Core.

Uma solicitação de dados tem a seguinte estrutura. Na prática, as solicitações de dados geralmente não incluem todas as propriedades listadas e podem utilizar outras propriedades de interação específicas de uma determinada fonte de dados.

Exemplo de uma solicitação para /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}'

Exemplo de uma solicitação para /v2/connections:

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

Sintaxe do objeto de solicitação de dados

A seguinte solicitação de dados mostra a sintaxe na notação d Python. A descrição também se aplica a 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

}

Propriedades, valores e descrições suportados

Propriedade Valor Descrição
asset_id O identificador global único (GUID) de um ativo de dados, ativo de conexão ou ativo de dados conectado no projeto, catálogo ou espaço de implantação.
batch_size Um número inteiro positivo menor ou igual a 100.000. O padrão é 10000. O Flight lê as linhas dos bancos de dados em blocos, gerenciados internamente em objetos do tipo RecordBatch. O batch_size define o número de linhas a serem lidas da fonte por bloco. Definir um tamanho de lote baixo pode reduzir o desempenho, pois a leitura da fonte ocorre com muita frequência.
commit_frequency Um valor válido é maior que 100, mas menor que 100.000. O padrão é 100. Confirma automaticamente a transação do banco de dados após gravar n as linhas. Utilizado apenas ao gravar dados em um banco de dados SQL.
connection_properties Na maioria dos casos, os não connection_properties são utilizados, especialmente em notebooks, onde o uso de connection_properties pode aumentar o risco de vazamento de credenciais. Você usaria connection_properties isso caso não tenha adicionado nenhum recurso ao projeto, mas queira acessar ou gravar dados em uma fonte de dados externa. Se os dados estiverem em uma fonte de dados externa, especifique as propriedades da conexão em um recurso de conexão e faça referência a essa conexão na solicitação de dados.
interaction_properties Isso interaction_properties depende do tipo de fonte de dados. Para obter uma lista das propriedades compatíveis por fonte de dados, consulte a lista [Tipos de fontes de dados da API Data and AI Common Core], que define os tipos de fontes de dados.
interaction_properties.row_limit O valor pode ser um número positivo. Se a propriedade row_limit não for especificada, todas as linhas serão lidas. Esta propriedade limita o número de linhas lidas da fonte. Geralmente, você pode começar com um limite ao explorar os dados. Caso contrário, o ambiente de execução pode ficar sem memória. Ao definir, row_limit normalmente qualquer valor atribuído a num_partitions é ignorado, sendo substituído pelo valor padrão 1.
interaction_properties.infer_schema Um valor booleano para solicitar que o mecanismo de inferência de tipos ( Flight service ) infira um tipo. O padrão é False. Algumas fontes de dados, como os arquivos ` CSV `, não fornecem tipos de dados para as colunas. Por padrão, todas as colunas serão tratadas como cadeias de caracteres. Você pode passar "infer_schema": true e o ` Flight service ` irá ler o arquivo e tentar adivinhar os formatos dos campos. Flight service lê apenas as primeiras 1.000 linhas; portanto, pode chegar a uma conclusão incorreta se um campo não apresentar uma boa variedade das propriedades disponíveis nessas primeiras 1.000 linhas. Por exemplo, ao detectar valores 0 ou 1 nas primeiras 1.000 linhas, o Flight pode concluir que uma coluna é do tipo booleano, quando na verdade deveria ser do tipo inteiro, pois as linhas posteriores apresentam valores maiores que 1.
interaction_properties.invalid_data_handling Um dos fail ou row ou column. O padrão é fail. Define como lidar com valores inválidos; por exemplo, cancelar a tarefa, definir a coluna como nula ou excluir a linha.
num_partitions Um número inteiro positivo. O padrão é 1. Algumas fontes de dados podem fornecer acesso aos dados por meio de vários pontos de conexão. Essa técnica pode ser usada para ler vários fluxos em threads paralelas. O valor de num_partitions define quantos pontos de extremidade o Flight service deve fornecer ao cliente. O valor de num_partitions é ignorado se a fonte de dados não for compatível com vários pontos de extremidade. O valor também pode ser ignorado se entrar em conflito com outros atributos, como row_limit.
project_id O GUID do seu projeto.
fields fields são definidas como uma lista de dicionários, que deve incluir, no mínimo, as propriedades nametype e. Para obter mais informações sobre fields, consulte fields propriedade.
É utilizado na leitura de dados, mas não na gravação de dados.

Propriedade fields

A fields propriedade enumera os campos, também conhecidos como colunas, a serem selecionados de uma fonte de dados. Ao ler um arquivo de formato " CSV " ou delimitado, esta lista de campos define os nomes e os tipos dos campos contidos no arquivo. A disposição dos valores no arquivo deve corresponder exatamente à lista de campos. Cada campo deve especificar tanto o nome quanto o tipo de dados.

Os valores permitidos para o type atributo em fields são (os nomes não diferenciam maiúsculas de minúsculas): 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
Os valores para o type atributo em fields são os nomes usados pelo Flight service Quando os dados são lidos, esses tipos são mapeados para os tipos de dados utilizados no Arrow Flight de código aberto. Para obter mais informações, consulte Tipos de dados e Modelo de dados em memória. Por exemplo, TINYINT é mapeado para int8() e BIGINT para int64().

No entanto, com algumas fontes de dados, por exemplo, ao ler um arquivo Parquet ou uma tabela em um banco de dados SQL externo, a lista de campos pode especificar um subconjunto das colunas a serem lidas da fonte.

Flight service não vai ler outras colunas. Por padrão, todas as colunas da tabela seriam recuperadas. Cada campo deve especificar tanto o nome quanto o tipo de dados. O tipo pode substituir o tipo da coluna na tabela externa. Por exemplo, uma coluna armazenada como VARCHAR(10) pode ser mapeada para bigint no Flight. Essa fields propriedade não é utilizada ao gravar em um banco de dados; em vez disso, o ` Flight service ` utiliza o esquema fornecido em do_put(...). O exemplo a seguir mostra como usar a fields propriedade na notação d Python. No entanto, a descrição também se aplica a R.

```json {: .codeblock}
    "fields": [{"name":"a","type":{"type":"bigint"}},
           {"name":"b","type":{"type":"varchar"}}
          ]
```
: O valor do atributo `type` é outro dicionário que contém outro atributo `type`.

Se a fields propriedade for fornecida na solicitação de dados, ela infer_schema será implicitamente definida como false, pois a fields propriedade já define os tipos de dados.

:

Se você usa o pandas DataFrames e deseja verificar a correspondência entre os tipos de dados no Flight e no pandas, consulte Diferenças entre tipos.

A fields propriedade especifica o nome e o tipo de dados de uma coluna, além de outros detalhes. O exemplo a seguir mostra a estrutura do fields modelo na notação d Python. No entanto, a descrição também se aplica a 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
    }
}

A combinação de length e scale define a precisão e a escala de um tipo de dados numérico ou decimal.

A propriedade signed influencia o tipo e o intervalo de valores considerados válidos.

  • {"type":"TINYINT","signed":true} é mapeado para o tipo int8() em Flight. Os valores válidos são -128 <= signed tinyint <= 127.
  • {"type":"TINYINT","signed":False} é mapeado para o tipo uint8() em Flight. Os valores válidos são 0 <= unsigned tinyint <= 255. |

Saiba mais