Referência do Transact-SQL do PolyBase
Aplica-se a: SQL Server
Este artigo analisa as opções de uso do PolyBase para consultar dados externos no local, conhecidos como virtualização de dados, para uma variedade de fontes de dados externas.
Para usar o PolyBase, você precisa criar tabelas externas para fazer referência a seus dados externos. Consulte:
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
Nota
Para usar o PolyBase, você deve permissões no nível de sysadmin ou SERVER CONTROL no banco de dados.
Para obter exemplos de consultas, veja Consultas do PolyBase.
Para obter mais tutoriais sobre várias fontes de dados externas, consulte:
- Hadoop
- Armazenamento de Blobs do Azure
- SQL Server
- Oracle
- Teradata
- MongoDB
- Tipos genéricos de ODBC
- Armazenamento de objetos compatível com o S3
- CSV
- Tabela Delta
Em alguns casos, pode ser necessário saber qual fonte do arquivo ou pasta se correlaciona com uma linha específica no conjunto de resultados.
Você pode usar as funções filepath
e filename
para retornar nomes de arquivo e/ou caminho no conjunto de resultados. Ou você pode usá-los para filtrar dados com base no nome do arquivo e/ou caminho da pasta. Nas seções a seguir, você encontrará breves descrições junto com os exemplos.
Essa função retorna o nome do arquivo de origem da linha.
O tipo de dados retornado é nvarchar (1024). Para obter um desempenho ideal, sempre converta o resultado da função filename para o tipo de dados apropriado. Se você usar o tipo de dados de caractere, use o comprimento apropriado.
O exemplo a seguir lê os arquivos de dados de Táxis amarelos em NYC relativos aos últimos três meses de 2017 e retorna o número de corridas por arquivo. A parte OPENROWSET
da consulta especifica quais arquivos 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 a seguir mostra como filename()
pode ser usado na cláusula WHERE
para filtrar os arquivos a serem lidos. Ele acessa toda a pasta na parte OPENROWSET
da consulta e filtra os arquivos na cláusula WHERE
.
Os 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];
Essa função retorna um caminho completo ou uma parte do caminho:
- Quando chamada sem parâmetro, retorna o caminho de arquivo completo da origem de uma linha.
- Quando chamada com parâmetro, ela retorna parte do caminho que corresponda ao curinga na posição especificada no parâmetro. Por exemplo, o valor de parâmetro 1 retornaria a parte do caminho que corresponde ao primeiro caractere curinga.
O tipo de dados retornado é nvarchar (1024). Para obter um desempenho ideal, sempre converta o resultado da função filepath
para o tipo de dados apropriado. Se você usar o tipo de dados de caractere, use o comprimento apropriado.
O exemplo a seguir lê arquivos de dados de Táxis amarelos em NYC relativos aos últimos três meses de 2017. Ele retorna o número de corridas por caminho de arquivo. A parte OPENROWSET
da consulta especifica quais arquivos 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 a seguir mostra como filepath()
pode ser usado na cláusula WHERE
para filtrar os arquivos a serem lidos.
Você pode usar os curingas na parte OPENROWSET
da consulta e filtrar os arquivos na cláusula WHERE
. Os 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;