Todos os produtos
Search
Central de documentação

MaxCompute:Parameterized view

Última atualização: Jun 26, 2026

As views parametrizadas estendem as views padrão do MaxCompute ao aceitar tabelas e valores escalares como parâmetros. Diferentemente das views tradicionais, elas permitem passar condições de filtro, referências de tabela e outros argumentos no momento da chamada. Isso possibilita reutilizar lógica SQL complexa em diferentes conjuntos de dados sem duplicar código.

Quando usar views parametrizadas

Objetivo

Abordagem recomendada

Encapsular lógica SQL uma única vez e chamá-la com diferentes conjuntos de dados

View parametrizada

Aplicar a mesma lógica de junção ou filtro a várias tabelas de entrada

View parametrizada

Criar um atalho SQL simples e não parametrizado

View tradicional

Nota

Defina views parametrizadas obrigatoriamente usando SQL em Script Mode.

Sintaxe

CREATE [OR REPLACE] [IF NOT EXISTS] <view_name> (<variable_name> <variable_type> [, <variable_name> <variable_type> ...])
[RETURNS <return_variable> TABLE (<col_name> <col_type> COMMENT <col_comment> [, <col_name> <col_type> COMMENT <col_comment>])]
[COMMENT <view_comment>]
AS
{<select_statement> | BEGIN <statements> END}

Parâmetros

Parâmetro

Obrigatório

Descrição

view_name

Sim

Nome da view

variable_name

Sim

Nome de um parâmetro da view

variable_type

Sim

Tipo de dados de um parâmetro da view

return_variable

Não

Nome da variável que armazena o valor de retorno

col_name

Não

Nome de uma coluna na tabela de retorno

col_type

Não

Tipo de dados de uma coluna na tabela de retorno

col_comment

Não

Comentário para uma coluna na tabela de retorno

view_comment

Não

Comentário para a view

select_statement

Sim (ou statements)

Cláusula SELECT que define o corpo da view

statements

Sim (ou select_statement)

Script com múltiplas instruções entre BEGIN e END

Definir e chamar uma view parametrizada

Parâmetros escalares

Parâmetros escalares aceitam um único valor, como uma constante STRING ou BIGINT.

O exemplo abaixo cria a view pv1, que junta a tabela srcp a um parâmetro de tabela @a por chaves correspondentes e filtra os resultados pelo parâmetro string @b. Em seguida, chama-se a view de três formas diferentes em uma única sessão SQL em Script Mode:

-- Create the prerequisite table (skip if it already exists)
CREATE TABLE srcp (key STRING, value BIGINT, p STRING);

-- Create a parameterized view
-- @a: a table parameter with schema (k STRING, v BIGINT)
-- @b: a string scalar parameter
CREATE VIEW IF NOT EXISTS pv1 (@a TABLE (k STRING, v BIGINT), @b STRING)
AS
SELECT srcp.key, srcp.value FROM srcp JOIN @a ON srcp.key = a.k AND srcp.p = @b;

-- Create prerequisite tables for calling the view (skip if they already exist)
CREATE TABLE src  (key STRING, value BIGINT);
CREATE TABLE src2 (key STRING, value BIGINT);
CREATE TABLE src3 (key STRING, value BIGINT);

-- Pass a table variable and a string constant
@a := SELECT * FROM src WHERE value > 0;
@b := SELECT * FROM pv1(@a, '20170101');

-- Pass a physical table name and a scalar variable
@another_day := '20170102';
@c := SELECT * FROM pv1(src2, @another_day);

-- Pass a CTE alias
@d := SELECT * FROM @c UNION ALL SELECT * FROM @b;
WITH t AS (SELECT * FROM src3)
SELECT * FROM @c
UNION ALL SELECT * FROM @d
UNION ALL SELECT * FROM pv1(t, @another_day);

O parâmetro de tabela aceita:

  • Nome de uma tabela física ou view (por exemplo, src2)

  • Variável de tabela (por exemplo, @a)

  • Subconsulta entre parênteses (por exemplo, (SELECT * FROM src WHERE value > 0))

  • Alias de CTE (por exemplo, t)

Parâmetros escalares aceitam variáveis ou constantes.

Parâmetros de tabela

Parâmetros de tabela aceitam uma referência de tabela: tabela física, view, variável de tabela ou alias de common table expression (CTE). O esquema da tabela deve corresponder ao esquema declarado na definição do parâmetro.

Uso do tipo any

Defina o tipo de uma coluna como any quando a view parametrizada não precisar inspecionar ou calcular o valor dessa coluna. Um caso comum é repassar a coluna sem alterações com SELECT *. O tipo any não pode ser usado em operações que exigem um tipo de dados específico, como + ou AND.

CREATE TABLE students (name STRING, id BIGINT, age BIGINT);

CREATE VIEW paramed_view (@a TABLE (name STRING, id ANY, age BIGINT))
AS SELECT * FROM @a WHERE name = 'foo' AND age < 25;

-- Call the view
SELECT * FROM paramed_view ((SELECT name, id, age FROM students));
Nota

Execute DESC <view_name> para inspecionar o tipo de retorno de uma view. Esse tipo é recalculado a cada chamada, portanto pode diferir do tipo especificado na criação. Por exemplo, any no momento da definição pode resolver para um tipo concreto no momento da chamada.

**Uso de curinga (*) em parâmetro de tabela**

Use * em um parâmetro de tabela para aceitar colunas adicionais além das fixas. A seção do curinga é chamada de parte de comprimento variável.

CREATE TABLE school (name STRING, address STRING);
CREATE TABLE student (name STRING, school STRING, age STRING, address STRING);

-- @a: first column is STRING, followed by any columns of any type
-- @b: first column is STRING, followed by any columns of STRING type
CREATE VIEW paramed_view1 (@a TABLE (key STRING, * ANY), @b TABLE (key STRING, * STRING))
AS SELECT a.* FROM @a JOIN @b ON a.key = b.key;

-- Call the view
SELECT name, address FROM paramed_view1 (
    (SELECT school, name, age, address FROM student),
    school
) WHERE age < 20;

A parte de comprimento variável possui as seguintes restrições:

  • Deve aparecer no final do esquema da tabela. Nenhuma coluna fixa pode vir após o *.

  • Cada parâmetro de tabela pode ter apenas uma parte de comprimento variável.

  • Essa parte não tem nome, portanto não é possível referenciar ou calcular suas colunas diretamente. Use SELECT * para repassar os dados.

  • Se os nomes das colunas diferirem entre a tabela de entrada e a definição do parâmetro, o compilador os renomeia automaticamente. Caso os tipos de dados sejam diferentes, o compilador converte-os implicitamente. Se a conversão falhar, o sistema retornará um erro.

Views com múltiplas instruções

Uma view parametrizada pode conter várias instruções SQL em um bloco BEGIN...END. A última atribuição à variável de tabela implícita — aquela com o mesmo nome da view — funciona como valor de retorno.

CREATE VIEW IF NOT EXISTS pv2 (@a TABLE (k STRING, v BIGINT), @b STRING) AS
BEGIN
    @srcp := SELECT * FROM srcp WHERE p = @b;
    @pv2  := SELECT srcp.key, srcp.value FROM @srcp JOIN @a ON srcp.key = a.k;
END;
Nota

@pv2 := ... é a atribuição de retorno. Equivale a uma instrução RETURN, pois atribui o resultado a uma variável de tabela implícita com o mesmo nome da view.

Declarar um tipo de retorno explícito

Declare a cláusula RETURNS para documentar o esquema de saída e facilitar o uso da view.

CREATE VIEW IF NOT EXISTS pv3 (@a TABLE (k STRING, v BIGINT), @b STRING)
RETURNS @ret TABLE (x STRING COMMENT 'This is the x', y STRING COMMENT 'This is the y')
COMMENT 'This is view pv3'
AS
BEGIN
    @srcp := SELECT * FROM srcp WHERE p = @b;
    @ret  := SELECT srcp.key, srcp.value FROM @srcp JOIN @a ON srcp.key = a.k;
END;

RETURNS @ret TABLE (x STRING, y STRING) define dois elementos:

  • Esquema de retornoTABLE (x STRING, y STRING) é o tipo retornado ao chamador. Utilize-o para impor um esquema de saída consistente.

  • Variável de retorno@ret é a variável nomeada atribuída no script da view. Atribuir valores a @ret funciona como instrução de retorno desta view.

Uma view sem bloco BEGIN...END e sem cláusula RETURNS explícita é considerada uma view parametrizada simplificada.

Observações de uso

  • Apenas instruções DML são permitidas no script da view. O sistema não suporta instruções SELECT que retornam saída diretamente, INSERT nem CREATE TABLE.

  • A correspondência de parâmetros segue regras de linguagem fracamente tipada: se um parâmetro real puder ser convertido implicitamente para o tipo declarado, a correspondência ocorre. Por exemplo, BIGINT corresponde a um parâmetro DOUBLE. Para parâmetros de tabela, a correspondência acontece quando o esquema da tabela de entrada pode ser inserido no esquema declarado.

  • Defina o corpo da view usando uma cláusula SELECT (forma simplificada) ou um bloco de script BEGIN...END (forma com múltiplas instruções).