2017-01-23 14 views
1

나는 폴리 기반을 통해 Azure BLOB 스토리지의 File 데이터를 Azure SQL DW 외부 테이블에로드했습니다. 이제 Blob 컨테이너에있는 파일이 업데이트되었습니다. 이제 새로운 데이터를로드하고 싶습니다. 어느 누구라도 새로운 데이터가 폴리 기반을 통해 외부 테이블에로드되는 방법을 제안 할 수 있습니까? 존재하는 경우 외부 테이블을 삭제하고 새로운 데이터를로드하기 위해 다시 작성하는 방법을 시도하고 있습니다.Poly Base 외부 테이블을 삭제하는 방법은 무엇입니까?

+0

BLOB 저장소의 파일이 업데이트 된 경우 외부 테이블을 쿼리하기 만하면 새 데이터가 표시되어 삭제하고 다시 만들 필요가 없습니다. – wBob

답변

2

https://msdn.microsoft.com/en-us/library/dn935021.aspx에 지정된대로 외부 테이블을 만든 경우 아무 작업도 수행해서는 안됩니다.

외부 테이블은 파일의 "포인터"가되며 테이블을 쿼리 할 때마다 원본 파일에서 데이터가 읽혀집니다. 이 방법으로 파일을 업데이트하면 Azure SQL DW에서 수행 할 작업이 없습니다.

외부 테이블에서 읽는 CREATE TABLE AS SELECT 구문 (https://msdn.microsoft.com/en-us/library/mt204041.aspx 참조)을 사용하여 Azure SQL DW에서 데이터를 가져온 경우 여기에 위와 같이 테이블을 삭제해야하지만 외부 테이블은 삭제해야합니다 또한 외부 테이블을 조회 할 때 갱신 된 파일이 읽 t집니다.

그래서 :

--creating an external table (using defined external data source and file format): 
CREATE EXTERNAL TABLE ClickStream ( 
url varchar(50), 
event_date date, 
user_IP varchar(50) 
) 
WITH ( 
    LOCATION='/webdata/employee.tbl', 
    DATA_SOURCE = mydatasource, 
    FILE_FORMAT = myfileformat 
) 
; 

당신이 클릭 스트림에서 선택하면 항상 /webdata/employee.tbl 파일의 내용을 읽습니다. employee.tbl 파일을 새 데이터로만 업데이트하는 경우 취할 조치가 없습니다. 대신

:

--Use CREATE TABLE AS SELECT to import the Azure blob storage data into a new 
--SQL Data Warehouse table called ClickStreamData 
CREATE TABLE ClickStreamData 
WITH 
( 
CLUSTERED COLUMNSTORE INDEX, 
DISTRIBUTION = HASH (user_IP) 
) 
AS SELECT * FROM ClickStream 
; 

데이터가 인스턴스에서 ClickStreamData 테이블에 복사되며, 업데이트가 반영되지 않습니다 파일에. 이 경우 ClickStreamData를 삭제하고 다시 만들어야하지만, 외부 테이블이 업데이트 된 파일에서 데이터를 읽으므로 ClickStream을 소스로 사용할 수 있습니다.

4

새 데이터를 보려면 외부 테이블을 삭제할 필요가 없습니다. 그러나 DROP EXTERNAL TABLE 구문을 사용하여 필요에 따라 Polybase/external 테이블을 삭제할 수 있습니다 (예 : 정의 변경 또는 REJECT_TYPE). 당신은 또한 그들을 포기하기 전에 자신의 존재를 DMV sys.external_tables를 확인하실 수 있습니다 예를 들어

드롭 할 필요가 없을 것 언급 한 바와 같이
IF EXISTS (SELECT * FROM sys.external_tables WHERE object_id = OBJECT_ID('yourSchema.yourTable')) 
    DROP EXTERNAL TABLE yourSchema.yourTable 
GO 

푸른 SQL 데이터웨어 하우스는 아직 그러나 SQL 서버 2016에서와 DROP IF EXISTS (DIE) 구문을 지원하지 않습니다 새로운 데이터를보기위한 외부 테이블. BLOB 파일이 업데이트 된 경우 새 데이터는 다음 번에 쿼리 할 때 외부 테이블에 이 표시됩니다 ().

또 다른 접근법은 외부 테이블 정의에 디렉토리 이름을 제공하는 것입니다. 그리고 단순히 폴더에 새 파일을 드롭하여, 데이터는 예를 들어 테이블을 쿼리 다음에 나타납니다

CREATE EXTERNAL TABLE dbo.DimDate2External (
    DateId INT NOT NULL, 
    CalendarQuarter TINYINT NOT NULL, 
    FiscalQuarter TINYINT NOT NULL 
) 
WITH (
    LOCATION='/textfiles/dimDate/', 
    DATA_SOURCE=AzureStorage, 
    FILE_FORMAT=TextFile 
); 

당신이 DimDate1.txt라는 해당 폴더의 초기 파일을 가지고 다음 DimDate2.txt라는 새 파일을 추가 한 경우 그렇게 말 그것은 하나의 테이블에 나타납니다.