Trabalhe com procedimentos armazenados de SQL
Um procedimento armazenado é uma coleção de declarações que podem ser chamadas a partir de outras consultas ou outros procedimentos armazenados. Um procedimento pode receber argumentos de entrada e devolver valores como saída. Dá um nome e armazena um procedimento num conjunto de dados do BigQuery. Um procedimento armazenado pode aceder ou modificar dados em vários conjuntos de dados por vários utilizadores. Também pode conter uma consulta com várias declarações.
Alguns procedimentos armazenados estão integrados no BigQuery e não precisam de ser criados. Estes são denominados procedimentos do sistema e pode saber mais acerca deles na referência de procedimentos do sistema.
Os procedimentos armazenados suportam declarações de linguagem processual, que lhe permitem fazer coisas como definir variáveis e implementar o fluxo de controlo. Pode saber mais acerca das declarações de linguagem processual na referência de linguagem processual.
Crie um procedimento armazenado
Escolha uma das seguintes opções para criar um procedimento armazenado:
SQL
Para criar um procedimento, use a declaração
CREATE PROCEDURE.
No exemplo conceptual seguinte, procedure_name representa o procedimento e o corpo do procedimento aparece entre as declarações BEGIN e END:
CREATE PROCEDURE dataset_name.procedure_name()
BEGIN
-- statements here
END
O exemplo seguinte mostra um procedimento que contém uma consulta com várias declarações.
A consulta com várias declarações define uma variável, executa uma declaração INSERT e
apresenta o resultado como uma string de texto formatada.
CREATE OR REPLACE PROCEDURE mydataset.create_customer()
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id)
VALUES(id);
SELECT FORMAT("Created customer %s", id);
END
No exemplo anterior, o nome do procedimento é
mydataset.create_customer e o corpo do procedimento aparece entre as declarações
BEGIN e
END.
Para chamar o procedimento, use a declaração
CALL:
CALL mydataset.create_customer();
Terraform
Use o
google_bigquery_routine recurso.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
O exemplo seguinte cria um procedimento armazenado com o nome my_stored_procedure:
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf, por exemplo,main.tf. Neste tutorial, o ficheiro é denominadomain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o ficheiro
main.tfcriado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade:terraform init -upgrade
Aplique as alterações
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça correções à configuração conforme necessário.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yesno comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
Transmita um valor com um parâmetro de entrada
Um procedimento pode ter parâmetros de entrada. Um parâmetro de entrada permite a entrada para um procedimento, mas não permite a saída.
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING)
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
Transmita um valor com um parâmetro de saída
Um procedimento pode ter parâmetros de saída. Um parâmetro de saída devolve um valor do procedimento, mas não permite a entrada para o procedimento. Para criar um parâmetro de saída, use a palavra-chave OUT antes do nome do parâmetro.
Por exemplo, esta versão do procedimento devolve o ID do novo cliente através do parâmetro id:
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING, OUT id STRING)
BEGIN
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
Para chamar este procedimento, tem de usar uma variável para receber o valor de saída:
--- Create a new customer record.
DECLARE id STRING;
CALL mydataset.create_customer("alice",id);
--- Display the record.
SELECT * FROM mydataset.customers
WHERE customer_id = id;
Transmita um valor com um parâmetro de entrada/saída
Um procedimento também pode ter parâmetros de entrada/saída. Um parâmetro de entrada/saída devolve um valor do procedimento e também aceita entradas para o procedimento. Para
criar um parâmetro de entrada/saída, use a palavra-chave INOUT antes do nome do
parâmetro. Para mais informações, consulte o artigo
Modo de argumento.
Autorize rotinas
Pode autorizar procedimentos armazenados como rotinas. As rotinas autorizadas permitem-lhe partilhar resultados de consultas com utilizadores ou grupos específicos sem lhes conceder acesso às tabelas subjacentes que geraram os resultados. Por exemplo, uma rotina autorizada pode calcular uma agregação sobre dados ou procurar um valor de tabela e usar esse valor num cálculo.
As rotinas autorizadas podem criar, eliminar, e manipular tabelas, bem como invocar outros procedimentos armazenados na tabela subjacente.
Para mais informações, consulte o artigo Rotinas autorizadas.
Chame um procedimento armazenado
Para chamar um procedimento armazenado depois de criado, use a declaração CALL.
Por exemplo, a seguinte declaração chama o procedimento armazenado
create_customer:
CALL mydataset.create_customer();
Chame um procedimento do sistema
Para chamar um procedimento do sistema integrado, use a declaração CALL.
Por exemplo, a seguinte declaração chama o procedimento do sistema
BQ.REFRESH_MATERIALIZED_VIEW:
CALL BQ.REFRESH_MATERIALIZED_VIEW;