Partilhar via


Referência Transact-SQL PolyBase

Aplica-se a: SQL Server

Este artigo analisa opções para usar o PolyBase para consultar dados externos no local, referido como virtualização de dados, para uma variedade de fontes de dados externas.

Sintaxe T-SQL usada no PolyBase

Para usar o PolyBase, deve criar tabelas externas para referenciar os seus dados externos. Consulte:

Observação

Para usar o PolyBase, deve ter permissões ao nível de sysadmin ou CONTROL SERVER na base de dados.

Tutoriais

Para exemplos de consultas, veja PolyBase Queries.

Para obter mais tutoriais sobre várias fontes de dados externas, consulte:

Funções de metadados de arquivo

Por vezes, pode precisar de saber qual a fonte do ficheiro ou da pasta que se correlaciona com uma linha específica no conjunto de resultados.

Podes usar funções filepath e filename devolver nomes de ficheiros e/ou o caminho no conjunto de resultados. Ou pode usá-los para filtrar dados com base no nome do ficheiro e/ou no caminho da pasta. Nas secções seguintes, encontrará breves descrições juntamente com exemplos.

Função de nome de ficheiro

Esta função devolve o nome do ficheiro de onde a linha se originou.

O tipo de devolução de dados é nvarchar(1024). Para um desempenho ótimo, deverá sempre converter o resultado da função do nome do ficheiro para o tipo de dado apropriado. Se usar o tipo de dado de carácter, certifique-se de que é usado o comprimento adequado.

O exemplo seguinte lê os ficheiros de dados do NYC Yellow Taxi para os últimos três meses de 2017 e devolve o número de viagens por ficheiro. A OPENROWSET parte da consulta especifica quais os ficheiros que serão lidos.

SELECT
    nyc.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM  
    OPENROWSET(
        BULK 'parquet/taxi/year=2017/month=9/*.parquet',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT='PARQUET'
    ) nyc
GROUP BY nyc.filename();

O exemplo seguinte mostra como filename() pode ser usado na WHERE cláusula para filtrar os ficheiros a serem lidos. O sistema acede à pasta completa na OPENROWSET parte da consulta e filtra todos os ficheiros na cláusula WHERE.

Os seus resultados serão os mesmos do exemplo anterior.

SELECT
    r.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
    BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2) 
        WITH (C1 varchar(200) ) AS [r]
WHERE
    r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
    r.filename()
ORDER BY
    [filename];

Função de caminho de ficheiro

Esta função devolve um caminho completo ou uma parte do caminho:

  • Quando chamada sem parâmetro, devolve o caminho completo do ficheiro de onde uma linha se origina.
  • Quando chamado com parâmetro, devolve parte do caminho que corresponde ao caracter curinga na posição especificada no parâmetro. Por exemplo, o valor do parâmetro 1 devolveria parte do caminho que corresponde ao primeiro coringa.

O tipo de devolução de dados é nvarchar(1024). Para um desempenho ótimo, converta sempre o resultado da função filepath para o tipo de dado apropriado. Se usar o tipo de dado de carácter, certifique-se de que é usado o comprimento adequado.

A amostra seguinte lê os ficheiros de dados do Yellow Taxi de Nova Iorque dos últimos três meses de 2017. Devolve o número de viagens por caminho de ficheiro. A OPENROWSET parte da consulta especifica quais os ficheiros que serão lidos.

SELECT
    r.filepath() AS filepath
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id INT
    ) AS [r]
GROUP BY
    r.filepath()
ORDER BY
    filepath;

O exemplo seguinte mostra como filepath() pode ser usado na WHERE cláusula para filtrar os ficheiros a serem lidos.

Pode usar os curingas na parte OPENROWSET da consulta e filtrar os ficheiros na cláusula WHERE. Os seus resultados serão os mesmos do exemplo anterior.

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_*-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',        
        FIRSTROW = 2
    )
WITH (
    vendor_id INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;