Tutorial 1: Crie um banco de dados, esquema, tabela e warehouse¶
Introdução¶
Neste tutorial, você aprenderá os fundamentos para gerenciar objetos de recurso Snowflake usando o Snowflake Python APIs. Para começar a usar a API, você cria e gerencia um banco de dados Snowflake, um esquema, uma tabela e um warehouse virtual.
Pré-requisitos¶
Nota
Se você já concluiu as etapas em Configuração comum para tutoriais das APIs Snowflake Python, pode pular esses pré-requisitos e prosseguir para a primeira etapa deste tutorial.
Antes de iniciar este tutorial, é necessário concluir as instruções de configuração comuns, que incluem as seguintes etapas:
Configure seu ambiente de desenvolvimento.
Instale o pacote Snowflake Python APIs.
Configure sua conexão Snowflake.
Importe todos os módulos necessários para os tutoriais da API Python.
Crie um objeto
Root
da API.
Após concluir esses pré-requisitos, você estará pronto para começar a usar a API.
Criação de um banco de dados, esquema e tabela¶
É possível usar seu objeto root
para criar um banco de dados, um esquema e uma tabela em sua conta Snowflake.
Para criar um banco de dados, na próxima célula de seu notebook, execute o seguinte código:
database = root.databases.create( Database( name="PYTHON_API_DB"), mode=CreateMode.or_replace )
Este código, que é funcionalmente equivalente ao comando SQL
CREATE OR REPLACE DATABASE PYTHON_API_DB
, cria um banco de dados em sua conta nomeadoPYTHON_API_DB
. Este código segue um padrão comum para gerenciar objetos no Snowflake:root.databases.create()
cria um banco de dados no Snowflake. Ele aceita dois argumentos: um objetoDatabase
e um modo.Você passa um objeto
Database
usandoDatabase(name="PYTHON_API_DB")
e define o nome do banco de dados usando o argumentoname
. Lembre-se de que você importouDatabase
na linha 3 do notebook.Você especifica o modo de criação passando o argumento
mode
. Neste caso, você define comoCreateMode.or_replace
, mas os seguintes valores também são válidos:CreateMode.if_not_exists
: Funcionalmente equivalente a CREATE IF NOT EXISTS no SQL.CreateMode.error_if_exists
: Gera uma exceção se o objeto já existir no Snowflake. Este é o valor padrão se um modo não for especificado.
Você gerencia o banco de dados programaticamente armazenando uma referência ao banco de dados em um objeto que tenha criado, nomeado
database
.
No Snowsight, navegue até a seção de bancos de dados de sua conta Snowflake. Se seu código for bem-sucedido, o banco de dados
PYTHON_API_DB
será listado.Dica
Se você usa o VS Code, instale a extensão Snowflake para explorar todos os objetos Snowflake em seu editor.
Para criar um esquema no banco de dados
PYTHON_API_DB
, na próxima célula, execute o seguinte código:schema = database.schemas.create( Schema( name="PYTHON_API_SCHEMA"), mode=CreateMode.or_replace, )
Observe que você chama
.schemas.create()
no objetodatabase
criado anteriormente.Para criar uma tabela no esquema que acabou de criar, na próxima célula, execute o seguinte código:
table = schema.tables.create( Table( name="PYTHON_API_TABLE", columns=[ TableColumn( name="TEMPERATURE", datatype="int", nullable=False, ), TableColumn( name="LOCATION", datatype="string", ), ], ), mode=CreateMode.or_replace )
Este código cria uma tabela no esquema
PYTHON_API_SCHEMA
com duas colunas e seus tipos de dados especificados:TEMPERATURE
comoint
eLOCATION
comostring
.Esses dois últimos exemplos de código devem parecer familiares porque seguem o padrão da primeira etapa em que você criou o banco de dados
PYTHON_API_DB
.Para confirmar que os objetos foram criados, retorne à sua conta Snowflake no Snowsight.
Recuperação de dados do objeto¶
É possível recuperar metadados sobre um objeto no Snowflake.
Para recuperar detalhes sobre a tabela
PYTHON_API_TABLE
criada anteriormente, na próxima célula do notebook, execute o seguinte código:table_details = table.fetch()
fetch()
retorna um objetoTableModel
.É possível então chamar
.to_dict()
sobre o objeto resultante para exibir suas informações detalhadas.Para imprimir os detalhes da tabela, na próxima célula, execute o seguinte código:
table_details.to_dict()
O notebook deve exibir um dicionário com metadados sobre a tabela
PYTHON_API_TABLE
, semelhante a este:{ "name": "PYTHON_API_TABLE", "kind": "TABLE", "enable_schema_evolution": False, "change_tracking": False, "data_retention_time_in_days": 1, "max_data_extension_time_in_days": 14, "default_ddl_collation": "", "columns": [ {"name": "TEMPERATURE", "datatype": "NUMBER(38,0)", "nullable": False}, {"name": "LOCATION", "datatype": "VARCHAR(16777216)", "nullable": True}, ], "created_on": datetime.datetime( 2024, 5, 9, 8, 59, 15, 832000, tzinfo=datetime.timezone.utc ), "database_name": "PYTHON_API_DB", "schema_name": "PYTHON_API_SCHEMA", "rows": 0, "bytes": 0, "owner": "ACCOUNTADMIN", "automatic_clustering": False, "search_optimization": False, "owner_role_type": "ROLE", }
Conforme mostrado, este dicionário contém informações sobre a tabela
PYTHON_API_TABLE
criada anteriormente, com informações detalhadas sobrecolumns
,owner
,database
,schema
e muito mais.
Metadados de objeto são úteis quando se está criando lógica de negócios em seu aplicativo. Por exemplo, é possível criar uma lógica que seja executada dependendo de certas informações sobre um objeto. É possível usar fetch()
para recuperar metadados de objeto em tais cenários.
Como alterar uma tabela programaticamente¶
É possível adicionar programaticamente uma coluna a uma tabela. A tabela PYTHON_API_TABLE
atualmente tem duas colunas: TEMPERATURE
e LOCATION
. Neste cenário, você deseja adicionar uma nova coluna nomeada ELEVATION
do tipo int
e defini-la como a chave primária da tabela.
Na próxima célula, execute o seguinte código:
table_details.columns.append( TableColumn( name="elevation", datatype="int", nullable=False, constraints=[PrimaryKey()], ) )
Nota
Este código não cria a coluna. Em vez disso, esta definição de coluna é anexada à matriz que representa as colunas da tabela em
TableModel
. Para exibir esta matriz, revise o valor decolumns
conforme descrito nas instruções para visualizar os metadados da tabela.Para modificar a tabela e adicionar a coluna, na próxima célula, execute o seguinte código:
table.create_or_alter(table_details)
Nesta linha, você chama
create_or_alter()
no objeto que representaPYTHON_API_TABLE
e passa o valor atualizado detable_details
. Esta linha adiciona a colunaELEVATION
aPYTHON_API_TABLE
.Para confirmar que a coluna foi adicionada, na próxima célula, execute o seguinte código:
table.fetch().to_dict()
A saída deve ser semelhante a esta:
{ "name": "PYTHON_API_TABLE", "kind": "TABLE", "enable_schema_evolution": False, "change_tracking": False, "data_retention_time_in_days": 1, "max_data_extension_time_in_days": 14, "default_ddl_collation": "", "columns": [ {"name": "TEMPERATURE", "datatype": "NUMBER(38,0)", "nullable": False}, {"name": "LOCATION", "datatype": "VARCHAR(16777216)", "nullable": True}, {"name": "ELEVATION", "datatype": "NUMBER(38,0)", "nullable": False}, ], "created_on": datetime.datetime( 2024, 5, 9, 8, 59, 15, 832000, tzinfo=datetime.timezone.utc ), "database_name": "PYTHON_API_DB", "schema_name": "PYTHON_API_SCHEMA", "rows": 0, "bytes": 0, "owner": "ACCOUNTADMIN", "automatic_clustering": False, "search_optimization": False, "owner_role_type": "ROLE", "constraints": [ {"name": "ELEVATION", "column_names": ["ELEVATION"], "constraint_type": "PRIMARY KEY"} ] }
Revise o valor de
columns
e o valor deconstraints
, ambos os quais agora incluem a colunaELEVATION
.Para confirmar a existência da nova coluna, retorne à sua conta Snowflake no Snowsight e inspecione a tabela.
Criação e gerenciamento de um warehouse¶
Também é possível gerenciar warehouses virtuais com o Snowflake Python APIs. Por exemplo, talvez seja necessário criar outro warehouse temporariamente para executar determinadas consultas. Neste cenário, é possível usar a API para criar, suspender ou descartar um warehouse.
Para recuperar a coleção de warehouses associados à sessão, na próxima célula, execute o seguinte código:
warehouses = root.warehouses
Você gerencia warehouses em sua sessão usando o objeto
warehouses
resultante.Para definir e criar um novo warehouse, na próxima célula, execute o seguinte código:
python_api_wh = Warehouse( name="PYTHON_API_WH", warehouse_size="SMALL", auto_suspend=500, ) warehouse = warehouses.create(python_api_wh,mode=CreateMode.or_replace)
Neste código, você define um novo warehouse instanciando
Warehouse
e especificando o nome, o tamanho e a política de suspensão automática do warehouse. O tempo limite de suspensão automática é em unidades de segundos. Neste caso, o warehouse será suspenso após 8,33 minutos de inatividade.Em seguida, você cria o warehouse chamando
create()
em sua coleção de warehouses. Você armazena a referência no objetowarehouse
resultante.Navegue até sua conta Snowflake no Snowsight e confirme se o warehouse foi criado.
Para recuperar informações sobre o warehouse, na próxima célula, execute o seguinte código:
warehouse_details = warehouse.fetch() warehouse_details.to_dict()
Este código deve parecer familiar porque segue o mesmo padrão usado para buscar metadados da tabela em uma etapa anterior. A saída deve ser semelhante a esta:
{ 'name': 'PYTHON_API_WH', 'auto_suspend': 500, 'auto_resume': 'true', 'resource_monitor': 'null', 'comment': '', 'max_concurrency_level': 8, 'statement_queued_timeout_in_seconds': 0, 'statement_timeout_in_seconds': 172800, 'tags': {}, 'warehouse_type': 'STANDARD', 'warehouse_size': 'Small' }
Opcional: Se você tiver vários warehouses em sua sessão, use a API para iterar por eles ou procurar um warehouse específico.
Na próxima célula, execute o seguinte código:
warehouse_list = warehouses.iter(like="PYTHON_API_WH") result = next(warehouse_list) result.to_dict()
Neste código, você chama
iter()
na coleção de warehouses e passa o argumentolike
, que retorna todos os warehouses cujos nomes correspondem à cadeia de caracteres especificada. Neste caso, você passa o nome do warehouse definido anteriormente, mas esse argumento geralmente é uma cadeia de caracteres que não diferencia maiúsculas de minúsculas e que funciona como um filtro, com suporte para caracteres curinga SQL como%
e_
.Após executar a célula, uma saída semelhante ao código a seguir mostra que você retornou com sucesso um warehouse correspondente:
{ 'name': 'PYTHON_API_WH', 'auto_suspend': 500, 'auto_resume': 'true', 'resource_monitor': 'null', 'comment': '', 'max_concurrency_level': 8, 'statement_queued_timeout_in_seconds': 0, 'statement_timeout_in_seconds': 172800, 'tags': {}, 'warehouse_type': 'STANDARD', 'warehouse_size': 'Small' }
Para modificar programaticamente o warehouse alterando seu tamanho para
LARGE
, na próxima célula, execute o seguinte código:warehouse = root.warehouses.create(Warehouse( name="PYTHON_API_WH", warehouse_size="LARGE", auto_suspend=500, ), mode=CreateMode.or_replace)
Para confirmar se o tamanho do warehouse foi atualizado para
LARGE
, faça um dos seguintes:Na próxima célula, execute o seguinte código:
warehouse.fetch().size
Acesse sua conta Snowflake no Snowsight e confirme a alteração no tamanho do warehouse.
Opcional: Se não quiser continuar usando o warehouse, descarte-o. Na próxima célula, execute o seguinte código:
warehouse.drop()
Para confirmar a exclusão do warehouse, retorne à sua conta Snowflake no Snowsight.
Qual é o próximo passo?¶
Parabéns! Neste tutorial, você aprendeu os fundamentos para gerenciar objetos de recurso do Snowflake usando o Snowflake Python APIs.
Resumo¶
Ao longo do processo, você concluiu as seguintes etapas:
Instale o Snowflake Python APIs.
Configure uma conexão com o Snowflake.
Criar um banco de dados, esquema e tabela.
Recupere informações de objeto.
Altere um objeto programaticamente.
Crie, suspenda e exclua um warehouse.
Próximo tutorial¶
Agora é possível prosseguir para o Tutorial 2: Crie e gerencie tarefas e gráficos de tarefa (DAGs), que mostra como criar e gerenciar tarefas e gráficos de tarefa.
Recursos adicionais¶
Para obter mais exemplos de uso da API para gerenciar outros tipos de objetos no Snowflake, consulte os seguintes guias do desenvolvedor:
Guia |
Descrição |
---|---|
Gerenciamento de usuários, funções e concessões Snowflake com Python |
Use a API para criar e gerenciar usuários, funções e concessões. |
Gerenciamento de recursos de carregamento e descarregamento de dados com Python |
Use a API para criar e gerenciar recursos de carregamento e descarregamento de dados, incluindo volumes externos, canais e estágios. |
Gerenciamento de tarefas e gráficos de tarefas do Snowflake com Python |
Use a API para criar, executar e gerenciar tarefas e gráficos de tarefas. |
Gerenciamento do Snowpark Container Services (incluindo funções de serviço) com Python |
Use a API para gerenciar componentes do Snowpark Container Services, incluindo pools de computação, repositórios de imagens, serviços e funções de serviço. |