O PyODPS é um SDK Python que permite usar o MaxCompute para processamento e análise de big data diretamente da sua máquina local. Este tópico demonstra como se conectar ao MaxCompute, executar consultas SQL, usar a API DataFrame e definir parâmetros de tempo de execução.
Este tópico aborda apenas ambientes Python locais. Se você usa o PyODPS em um nó do DataWorks, consulte a documentação do DataWorks.
Pré-requisitos
Antes de começar, verifique se você tem:
PyODPS instalado localmente e variáveis de ambiente definidas
A tabela de exemplo pyodps_iris criada no seu projeto — consulte Exemplos de uso para obter instruções sobre como baixar o conjunto de dados, criar a tabela e gravar dados nela
Primeiros passos
-
Abra um editor Python e crie um novo arquivo
.py.Se nenhum editor Python estiver instalado, crie um arquivo com a extensão
.pyusando qualquer editor de texto. Escreva seu código PyODPS. As seções a seguir abordam os principais recursos com exemplos executáveis.
Salve o arquivo e execute-o com
python <your-file>.py.
Inicialize o ponto de entrada ODPS
A classe ODPS é o ponto de entrada para todas as operações do PyODPS. Inicialize-a com suas credenciais e detalhes do projeto antes de chamar qualquer outra API.
Defina as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET antes de executar seu código. Codificar credenciais diretamente nos arquivos de origem representa um risco de segurança. (Não recomendado) Caso as variáveis de ambiente não estejam definidas, especifique as chaves explicitamente. Para isso, obtenha um access_id e secret_access_key.
import os
from odps import ODPS
o = ODPS(
# Read credentials from environment variables
access_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
secret_access_key=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# (Not recommended) To specify credentials explicitly instead:
# access_id='your-aliyun-access-key-id',
# secret_access_key='your-aliyun-access-key-secret',
project='<your-default-project>',
endpoint='<your-endpoint>',
)
Substitua os seguintes espaços reservados:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Nome do seu projeto MaxCompute. Faça login no console do MaxCompute para obter a lista de projetos. |
|
|
|
Endpoint correspondente à sua região e tipo de rede. |
|
Selecione o tipo de rede correto para o seu endpoint. Um tipo de rede incorreto causa falhas de conexão.
Após a inicialização, o objeto o suporta operações list, get, exist, create e delete em recursos do MaxCompute. Para referência completa, consulte Visão geral das operações básicas.
Execução de SQL
O MaxCompute suporta dois modos de execução SQL: o modo tradicional e a Aceleração de Consulta do MaxCompute (MCQA). Ambos aceitam instruções de Linguagem de Definição de Dados (DDL) e Linguagem de Manipulação de Dados (DML). O MCQA armazena resultados de jobs em cache e retorna esses resultados em execuções repetidas para acelerar o processamento. Para detalhes de faturamento, consulte Custos de computação (pagamento conforme o uso).
Os métodosexecute_sql()erun_sql()não suportam todos os tipos de instruções SQL. Para comandos que não sejam DDL ou DML, use o método correspondente diretamente — por exemplo, usecreate_table()para instruçõesCREATE TABLEerun_xflow()ouexecute_xflow()para comandos de API.
Uso do modo tradicional para executar comandos SQL
Use execute_sql() para executar uma instrução SQL e open_reader() para ler os resultados:
# Create a table using the dedicated method
o.create_table('my_t', 'num bigint, id string', if_not_exists=True)
# Run a SELECT query
result = o.execute_sql('SELECT * FROM pyodps_iris LIMIT 3')
with result.open_reader() as reader:
for record in reader:
print(record)
Para mais operações SQL, consulte SQL.
DataFrame
O PyODPS oferece uma API DataFrame para processamento de dados. Diferentemente do pandas, o DataFrame do PyODPS opera de forma lazy — ele só é executado quando você chama um método de execução imediata, como execute() ou persist().
from odps.df import DataFrame
# Load the pyodps_iris table as a DataFrame
iris = DataFrame(o.get_table('pyodps_iris'))
# Filter rows and print results — .execute() triggers the actual computation
for record in iris[iris.sepalwidth < 3].execute():
print(record)
Por padrão, o PyODPS não exibe detalhes de execução, como a URL do Logview. Para ativar a saída detalhada:
from odps import options
options.verbose = True
Para mais exemplos de DataFrame, consulte DataFrame (Não recomendado).
Definição de parâmetros de tempo de execução (hints)
Passe um dicionário hints para qualquer chamada SQL a fim de definir parâmetros de tempo de execução por consulta:
o.execute_sql('SELECT * FROM pyodps_iris', hints={'odps.sql.mapper.split.size': 16})
Para aplicar hints a todas as chamadas SQL na sessão, configure-os globalmente:
from odps import options
# All subsequent execute_sql() calls include these hints automatically
options.sql.settings = {'odps.sql.mapper.split.size': 16}
o.execute_sql('SELECT * FROM pyodps_iris')
Exemplo completo
O exemplo a seguir cobre todo o fluxo de trabalho: conexão com o MaxCompute, criação de tabela, gravação de dados, leitura, consulta à tabela pyodps_iris e limpeza dos recursos.
Este exemplo chama table.drop() ao final, o que exclui permanentemente a tabela my_new_table. Não utilize o nome de uma tabela existente como valor em create_table() se desejar mantê-la.
Crie um arquivo chamado
test-pyodps-local.py.-
Adicione o seguinte código:
import os from odps import ODPS o = ODPS( access_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), secret_access_key=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='<your-default-project>', endpoint='<your-endpoint>', ) # Create a non-partitioned table with two columns table = o.create_table('my_new_table', 'num bigint, id string', if_not_exists=True) # Write four records to the table records = [[111, 'aaa'], [222, 'bbb'], [333, 'ccc'], [444, 'Chinese']] o.write_table(table, records) # Read back the records for record in o.read_table(table): print(record[0], record[1]) # Query the pyodps_iris table using SQL result = o.execute_sql('SELECT * FROM pyodps_iris LIMIT 3;', hints={'odps.sql.allow.fullscan': 'true'}) # Drop the table to release resources table.drop() print('Read data from the pyodps_iris table using open_reader:') # Print query results with result.open_reader() as reader: for record in reader: print(record[0], record[1]) -
Execute o script:
python test-pyodps-local.pyA saída esperada é:
111 aaa 222 bbb 333 ccc 444 Chinese Read data from the pyodps_iris table using open_reader: 4.9 3.0 4.7 3.2 4.6 3.1
Próximos passos
Visão geral das operações básicas — operações de tabela, upload e download de dados, entre outros
DataFrame (Não recomendado) — processamento avançado de dados com a API DataFrame
Uso de nó PyODPS para segmentação de palavras chinesas Jieba — um exemplo de ponta a ponta no DataWorks