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
Rootda 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 objetoDatabasee um modo.Você passa um objeto
DatabaseusandoDatabase(name="PYTHON_API_DB")e define o nome do banco de dados usando o argumentoname. Lembre-se de que você importouDatabasena 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.
Para obter mais informações, consulte Gerenciamento de bancos de dados, esquemas, tabelas e exibições Snowflake com Python.
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_DBserá 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 objetodatabasecriado 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_SCHEMAcom duas colunas e seus tipos de dados especificados:TEMPERATUREcomointeLOCATIONcomostring.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_TABLEcriada 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_TABLEcriada anteriormente, com informações detalhadas sobrecolumns,owner,database,schemae 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 decolumnsconforme 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_TABLEe passa o valor atualizado detable_details. Esta linha adiciona a colunaELEVATIONaPYTHON_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
columnse 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
warehousesresultante.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
Warehousee 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 objetowarehouseresultante.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. |