2017-01-23 5 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データをインポートした場合は、テーブルを削除する必要がありますが、外部テーブルは削除する必要があります同様に、外部テーブルにクエリを実行すると、更新されたファイルが読み込まれます。

ので:

--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構文を使用して、必要に応じて、たとえば定義を変更するために、またはREJECT_TYPEなどのPolybase/externalテーブルを削除することができます。あなたはまた、それらをドロップする前に自分の存在のためにDMV sys.external_tablesを確認することができます例えば

ドロップする必要はないはずです述べたように
IF EXISTS (SELECT * FROM sys.external_tables WHERE object_id = OBJECT_ID('yourSchema.yourTable')) 
    DROP EXTERNAL TABLE yourSchema.yourTable 
GO 

AzureのSQLデータウェアハウスは、まだしかし、SQL Serverの2016年のようにDROP IF EXISTS (DIE)構文をサポートしていません 新しいデータを表示するだけの外部テーブル。 blobファイルが更新されている場合は、次に外部データベースに新しいデータがと表示され、と表示されます。

もう1つの方法は、外部テーブル定義にディレクトリ名を指定することです。そして、単にフォルダに新しいファイルをドロップすることで、データを使用して、テーブルをクエリ次回表示されます、例えば

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と呼ばれる新しいファイルを追加したと言いますそれはテーブルに1つとして表示されます。

関連する問題