CREATE EXTERNAL TABLE (Transact-SQL)CREATE EXTERNAL TABLE (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2016) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2016) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Erstellt eine externe Tabelle für PolyBase oder elastische Datenbankabfragen.Creates an external table for PolyBase, or Elastic Database queries. Abhängig vom jeweiligen Szenario unterscheidet sich die Syntax deutlich.Depending on the scenario, the syntax differs significantly. Eine externe Tabelle, die für PolyBase erstellt wurde, kann nicht für elastische Datenbankabfragen verwendet werden.An external table created for PolyBase cannot be used for Elastic Database queries. Auf ähnliche Weise kann eine externen Tabelle, die für elastische Datenbankenabfragen erstellt wurde, nicht für PolyBase, usw. verwendet werden.Similarly, an external table created for Elastic Database queries cannot be used for PolyBase, etc.

Hinweis

PolyBase wird nur in SQL Server 2016 (oder höher), Azure SQL Data Warehouse und Parallel Data Warehouse unterstützt.PolyBase is supported only on SQL Server 2016 (or higher), Azure SQL Data Warehouse, and Parallel Data Warehouse. Elastische Datenbankabfragen werden nur auf Azure SQL-Datenbank v12 oder höher unterstützt.Elastic Database queries are supported only on Azure SQL Database v12 or later.

  • SQL ServerSQL Server verwendet externe Tabellen, um auf Daten in einem Hadoop-Cluster oder in Azure Blob Storage zuzugreifen. Eine externe PolyBase-Tabelle, die auf Daten in einem Hadoop-Cluster oder in Azure Blob Storage verweist,uses external tables to access data stored in a Hadoop cluster or Azure blob storagea PolyBase external table that references data stored in a Hadoop cluster or Azure blob storage. kann auch zum Erstellen einer externen Tabelle für elastische Datenbankabfragen verwendet werden.Can also be used to create an external table for Elastic Database query.

Verwenden Sie eine externe Tabelle, um:Use an external table to:

  • Daten in Hadoop oder in Azure Blob Storage mit Transact-SQLTransact-SQL-Anweisungen abzufragen.Query Hadoop or Azure blob storage data with Transact-SQLTransact-SQL statements.

  • Daten aus Hadoop oder Azure Blob Storage in Ihre SQL ServerSQL Server-Datenbank zu importieren und speichern.Import and store data from Hadoop or Azure blob storage into your SQL ServerSQL Server database.

  • Eine externe Tabelle für die Verwendung mit einer elastischen DatenbankabfrageCreate an external table for use with an Elastic Database
    zu erstellen.query.

  • Die Daten aus Azure Data Lake Store in Azure SQL Data Warehouse zu importieren und zu speichernImport and store data from Azure Data Lake Store into Azure SQL Data Warehouse

Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) und DROP EXTERNAL TABLE (Transact-SQL).See also CREATE EXTERNAL DATA SOURCE (Transact-SQL) and DROP EXTERNAL TABLE (Transact-SQL).

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server 
  
-- Create a new external table  
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name   
    ( <column_definition> [ ,...n ] )  
    WITH (   
        LOCATION = 'folder_or_filepath',  
        DATA_SOURCE = external_data_source_name,  
        FILE_FORMAT = external_file_format_name  
        [ , <reject_options> [ ,...n ] ]  
    )  
[;]  
  
<reject_options> ::=  
{  
    | REJECT_TYPE = value | percentage  
    | REJECT_VALUE = reject_value  
    | REJECT_SAMPLE_VALUE = reject_sample_value  
  
}  
  
-- Create a table for use with Elastic Database query  
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name   
    ( <column_definition> [ ,...n ] )  
    WITH ( <sharded_external_table_options> )  
[;]  
  
<sharded_external_table_options> ::=  
        DATA_SOURCE = external_data_source_name,   
        SCHEMA_NAME = N'nonescaped_schema_name',  
        OBJECT_NAME = N'nonescaped_object_name',  
        [DISTRIBUTION  = SHARDED(sharding_column_name) | REPLICATED | ROUND_ROBIN]]  
    )  
[;]  
-- Syntax for Azure SQL Database
  
-- Create a table for use with Elastic Database query  
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name   
    ( <column_definition> [ ,...n ] )  
    WITH ( <sharded_external_table_options> )  
[;]  
  
<sharded_external_table_options> ::=  
        DATA_SOURCE = external_data_source_name,   
        SCHEMA_NAME = N'nonescaped_schema_name',  
        OBJECT_NAME = N'nonescaped_object_name',  
        [DISTRIBUTION  = SHARDED(sharding_column_name) | REPLICATED | ROUND_ROBIN]]  
    )  
[;]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
-- Create a new external table in SQL Server PDW  
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name   
    ( <column_definition> [ ,...n ] )  
    WITH (   
        LOCATION = 'hdfs_folder_or_filepath',  
        DATA_SOURCE = external_data_source_name,  
        FILE_FORMAT = external_file_format_name  
        [ , <reject_options> [ ,...n ] ]  
    )  
[;]  
  
<reject_options> ::=  
{  
    | REJECT_TYPE = value | percentage,  
    | REJECT_VALUE = reject_value,  
    | REJECT_SAMPLE_VALUE = reject_sample_value,
    | REJECTED_ROW_LOCATION = '\REJECT_Directory'
  
}  

ArgumenteArguments

database_name .database_name . [ schema_name ] .[ schema_name ] . | schema_name.| schema_name. ] table_name] table_name
Ein- bis dreiteiliger Name der Tabelle, die erstellt werden soll.The one to three-part name of the table to create. Für eine externe Tabelle werden nur die Metadaten der Tabelle zusammen mit den grundlegenden Statistiken über die Datei oder Ordner, auf die in Hadoop oder Azure Blob Storage verwiesen wird, gespeichert.For an external table, only the table metadata is stored in SQL along with basic statistics about the file and or folder referenced in Hadoop or Azure blob storage. Es werden keine tatsächlichen Daten in SQL ServerSQL Server verschoben oder gespeichert.No actual data is moved or stored in SQL ServerSQL Server.

<column_definition> [ ,...n ] CREATE EXTERNAL TABLE erlaubt eine oder mehrere Spaltendefinitionen.<column_definition> [ ,...n ] CREATE EXTERNAL TABLE allows one or more column definitions. CREATE EXTERNAL TABLE und CREATE TABLE verwenden dieselbe Syntax zur Spaltendefinition.Both CREATE EXTERNAL TABLE and CREATE TABLE use the same syntax for defining a column. Eine Ausnahme ist die Tatsache, dass Sie DEFAULT CONSTRAINT nicht in externen Tabellen verwenden können.An exception to this, you cannot use the DEFAULT CONSTRAINT on external tables. Die vollständigen Details zu Spaltendefinitionen und deren Datentypen finden Sie unter CREATE TABLE (Transact-SQL) und CREATE TABLE in der Azure SQL-Datenbank.For the full details about column definitions and their data types, see CREATE TABLE (Transact-SQL) and CREATE TABLE on Azure SQL Database.

Die Spaltendefinitionen, einschließlich der Datentypen und der Anzahl der Spalten, müssen mit den Daten in den externen Dateien übereinstimmen.The column definitions, including the data types and number of columns, must match the data in the external files. Wenn ein Konflikt besteht, werden die Zeilen der Datei beim Abfragen der tatsächlichen Daten zurückgewiesen.If there is a mismatch, the file rows will be rejected when querying the actual data.

LOCATION = 'folder_or_filepath'LOCATION = 'folder_or_filepath'
Gibt den Ordner oder den Dateipfad und Dateinamen für die tatsächlichen Daten in Hadoop oder Azure Blob Storage an.Specifies the folder or the file path and file name for the actual data in Hadoop or Azure blob storage. Der Speicherort beginnt im Stammordner. Der Stammordner ist der in der externen Datenquelle angegebene Datenspeicherort.The location starts from the root folder; the root folder is the data location specified in the external data source.

In SQL Server erstellt die Anweisung CREATE EXTERNAL TABLE den Pfad und den Ordner, wenn diese noch nicht vorhanden sind.In SQL Server, the CREATE EXTERNAL TABLE statement creates the path and folder if it does not already exist. Sie können dann INSERT INTO zum Exportieren von Daten aus einer lokalen SQL Server-Tabelle in die externe Datenquelle verwenden.You can then use INSERT INTO to export data from a local SQL Server table to the external data source. Weitere Informationen finden Sie unter PolyBase-Abfragen.For more information, see PolyBase Queries.

In SQL Data Warehouse und Analytics Platform System erstellt die Anweisung CREATE EXTERNAL TABLE AS SELECT den Pfad und den Ordner, wenn diese noch nicht vorhanden sind.In SQL Data Warehouse and Analytics Platform System, the CREATE EXTERNAL TABLE AS SELECT statement creates the path and folder if it does not exist. In diesen zwei Produkten erstellt CREATE EXTERNAL TABLE den Pfad und den Ordner nicht.In these two products, CREATE EXTERNAL TABLE does not create the path and folder.

Wenn LOCATION als Ordner angegeben wird, ruft eine PolyBase-Abfrage, die aus der externen Tabelle auswählt, Dateien aus dem Ordner und allen Unterordnern ab.If you specify LOCATION to be a folder, a PolyBase query that selects from the external table will retrieve files from the folder and all of its subfolders. Hadoop und PolyBase geben keine ausgeblendeten Ordner zurück.Just like Hadoop, PolyBase does not return hidden folders. Es werden auch keine Dateien zurückgegeben, deren Dateiname mit einem Unterstrich () oder einem Punkt (.) beginnt.It also does not return files for which the file name begins with an underline () or a period (.).

In diesem Beispiel gibt eine PolyBase-Abfrage Zeilen aus „mydata.txt“ und „mydata2.txt“ zurück, wenn LOCATION='/webdata/'.In this example, if LOCATION='/webdata/', a PolyBase query will return rows from mydata.txt and mydata2.txt. „Mydata3.txt“ wird nicht zurückgegeben, da es sich um einen Unterordner des ausgeblendeten Ordners handelt.It will not return mydata3.txt because it is a subfolder of a hidden folder. Es werden keine „_hidden.txt“-Dateien zurückgegeben, da es sich um eine ausgeblendete Datei handelt.It will not return _hidden.txt because it is a hidden file.

Rekursive Daten für externe TabellenRecursive data for external tables

Um den Standardordner zu ändern, und nur aus dem Stammordner zu lesen, legen Sie das Attribut <polybase.recursive.traversal> in der Konfigurationsdatei „core-site.xml“ auf FALSE fest.To change the default and only read from the root folder, set the attribute <polybase.recursive.traversal> to 'false' in the core-site.xml configuration file. Diese Datei befindet sich unter <SqlBinRoot>\PolyBase\Hadoop\Conf with SqlBinRoot the bin root of SQl Server.This file is located under <SqlBinRoot>\PolyBase\Hadoop\Conf with SqlBinRoot the bin root of SQl Server. Beispiel: C:\\Program Files\\Microsoft SQL Server\\MSSQL13.XD14\\MSSQL\\Binn.For example, C:\\Program Files\\Microsoft SQL Server\\MSSQL13.XD14\\MSSQL\\Binn.

DATA_SOURCE = external_data_source_nameDATA_SOURCE = external_data_source_name
Gibt den Namen der externen Datenquelle an, die den Speicherort der externen Daten enthält.Specifies the name of the external data source that contains the location of the external data. Dieser Speicherort ist entweder eine Hadoop oder ein Azure Blob Storage.This location is either a Hadoop or Azure blob storage. Verwenden Sie zum Erstellen einer externen Datenquelle CREATE EXTERNAL DATA SOURCE (Transact-SQL).To create an external data source, use CREATE EXTERNAL DATA SOURCE (Transact-SQL).

FILE_FORMAT = external_file_format_nameFILE_FORMAT = external_file_format_name
Gibt den Namen des externen Dateiformatobjekts an, das den Dateityp und die Komprimierungsmethode für die externen Daten enthält.Specifies the name of the external file format object that stores the file type and compression method for the external data. Verwenden Sie zum Erstellen eines externen Dateiformats CREATE EXTERNAL FILE FORMAT (Transact-SQL).To create an external file format, use CREATE EXTERNAL FILE FORMAT (Transact-SQL).

Reject-OptionenReject Options
Sie können Reject-Parameter angeben, die bestimmen, wie PolyBase modifizierte Datensätze behandelt, die aus der externen Datenquelle abgerufen werden.You can specify reject parameters that determine how PolyBase will handle dirty records it retrieves from the external data source. Ein Datensatz gilt als „dirty“ (modifiziert), wenn die tatsächlichen Datentypen oder die Anzahl der Spalten nicht den Spaltendefinitionen der externen Tabelle entsprechen.A data record is considered 'dirty' if it actual data types or the number of columns do not match the column definitions of the external table.

Wenn Sie die Reject-Werte nicht angeben oder ändern, verwendet PolyBase Standardwerte.When you do not specify or change reject values, PolyBase uses default values. Diese Informationen über die Reject-Parameter werden als zusätzliche Metadaten gespeichert, wenn Sie eine externe Tabelle mit der CREATE EXTERNAL TABLE-Anweisung erstellen.This information about the reject parameters is stored as additional metadata when you create an external table with CREATE EXTERNAL TABLE statement. Wenn eine zukünftige SELECT- oder SELECT INTO SELECT-Anweisung Daten aus der externen Tabelle auswählt, wird PolyBase die Reject-Optionen verwenden, um die Anzahl oder den Prozentsatz der Zeilen zu bestimmen, die zurückgewiesen werden können, bevor die tatsächliche Abfrage fehlschlägt.When a future SELECT statement or SELECT INTO SELECT statement selects data from the external table , PolyBase will use the reject options to determine the number or percentage of rows that can be rejected before the actual query fails. zugreifen.. Die Abfrage wird (Teil-) Ergebnisse zurückgeben, bis der Reject-Schwellenwert überschritten wird. Es wird dann eine entsprechende Fehlermeldung ausgelöst.The query will return (partial) results until the reject threshold is exceeded; it then fails with the appropriate error message.

REJECT_TYPE = value | percentageREJECT_TYPE = value | percentage
Gibt an, ob die Option „REJECT_VALUE“ als Literalwert oder als Prozentsatz angegeben wird.Clarifies whether the REJECT_VALUE option is specified as a literal value or a percentage.

Wertvalue
REJECT_VALUE ist ein Literalwert und kein Prozentsatz.REJECT_VALUE is a literal value, not a percentage. Die PolyBase-Abfrage schlägt fehl, wenn die Anzahl der abgelehnten Zeilen reject_value überschreitet.The PolyBase query will fail when the number of rejected rows exceeds reject_value.

Wenn beispielsweise REJECT_VALUE = 5 und REJECT_TYPE = Wert, wird die PolyBase-SELECT-Abfrage fehlschlagen, nachdem 5 Zeilen abgelehnt wurden.For example, if REJECT_VALUE = 5 and REJECT_TYPE = value, the PolyBase SELECT query will fail after 5 rows have been rejected.

Prozentwertpercentage
REJECT_VALUE ist ein Prozentsatz und kein Literalwert.REJECT_VALUE is a percentage, not a literal value. Eine PolyBase-Abfrage schlägt fehl, wenn der Prozentsatz fehlerhafter Zeilen reject_value überschreitet.A PolyBase query will fail when the percentage of failed rows exceeds reject_value. Der Prozentsatz der fehlerhaften Zeilen wird in Intervallen berechnet.The percentage of failed rows is calculated at intervals.

REJECT_VALUE = reject_valueREJECT_VALUE = reject_value
Gibt den Wert oder den Prozentsatz der Zeilen an, die zurückgewiesen werden können, bevor die Abfrage fehlschlägt.Specifies the value or the percentage of rows that can be rejected before the query fails.

Wenn REJECT_TYPE = Wert, muss reject_value eine ganze Zahl zwischen 0 und 2.147.483.647 sein.For REJECT_TYPE = value, reject_value must be an integer between 0 and 2,147,483,647.

Wenn REJECT_TYPE = Prozentzahl, muss reject_value eine Gleitkommazahl zwischen 0 und 100 sein.For REJECT_TYPE = percentage, reject_value must be a float between 0 and 100.

REJECT_SAMPLE_VALUE = reject_sample_valueREJECT_SAMPLE_VALUE = reject_sample_value
Dieses Attribut ist erforderlich, wenn Sie REJECT_TYPE = Prozentsatz angeben.This attribute is required when you specify REJECT_TYPE = percentage. Bestimmt die Anzahl der Zeilen, bei denen versucht wird, sie abzurufen, bevor die PolyBase den Prozentsatz der abgelehnten Zeilen neu berechnet.It determines the number of rows to attempt to retrieve before the PolyBase recalculates the percentage of rejected rows.

Der reject_sample_value-Parameter muss eine ganze Zahl zwischen 0 und 2.147.483.647 sein.The reject_sample_value parameter must be an integer between 0 and 2,147,483,647.

Ist beispielsweise REJECT_SAMPLE_VALUE = 1000, dann berechnet PolyBase den Prozentsatz von fehlerhaften Zeilen nach dem Importversuch von 1000 Zeilen aus der externen Datendatei.For example, if REJECT_SAMPLE_VALUE = 1000, PolyBase will calculate the percentage of failed rows after it has attempted to import 1000 rows from the external data file. Ist der Prozentsatz von fehlerhaften Zeilen kleiner als reject_value, führt PolyBase einen erneuten Abrufversuch von 1000 Zeilen aus.If the percentage of failed rows is less than reject_value, PolyBase will attempt to retrieve another 1000 rows. Nach jedem weiteren Importversuch von 1000 Zeilen wird der Prozentsatz von fehlerhaften Zeilen weiterhin neu berechnet.It continues to recalculate the percentage of failed rows after it attempts to import each additional 1000 rows.

Hinweis

Da die Berechnung des Prozentsatzes von fehlerhaften Zeilen durch PolyBase in Intervallen erfolgt, kann der tatsächliche Prozentsatz fehlerhafter Zeilen reject_value überschreiten.Since PolyBase computes the percentage of failed rows at intervals, the actual percentage of failed rows can exceed reject_value.

Beispiel:Example:

In diesem Beispiel wird verdeutlicht, wie die drei REJECT-Optionen interagieren.This example shows how the three REJECT options interact with each other. Gilt beispielsweise: REJECT_TYPE = Prozentsatz, REJECT_VALUE = 30 und REJECT_SAMPLE_VALUE = 100, dann könnte das folgende Szenario auftreten:For example, if REJECT_TYPE = percentage, REJECT_VALUE = 30, and REJECT_SAMPLE_VALUE = 100, the following scenario could occur:

  • PolyBase versucht, die ersten 100 Zeilen abzurufen. Davon sind 25 fehlerhaft und 75 erfolgreich.PolyBase attempts to retrieve the first 100 rows; 25 fail and 75 succeed.

  • Der Prozentsatz der berechneten fehlerhaften Zeilen ist mit 25 % kleiner als der REJECT-Wert von 30 %.Percent of failed rows is calculated as 25%, which is less than the reject value of 30%. Daher wird PolyBase weiterhin versuchen, Daten aus der externen Datenquelle abzurufen.Hence, PolyBase will continue retrieving data from the external data source.

  • PolyBase versucht, die nächsten 100 Zeilen zu laden. Dieses Mal sind 25 erfolgreich und 75 fehlerhaft.PolyBase attempts to load the next 100 rows; this time 25 succeed and 75 fail.

  • Der Prozentsatz fehlerhafter Zeilen wird mit 50 % neu berechnet.Percent of failed rows is recalculated as 50%. Der Prozentsatz fehlerhafter Zeilen hat den REJECT-Wert von 30 % überschritten.The percentage of failed rows has exceeded the 30% reject value.

  • Die PolyBase-Abfrage schlägt fehl, da nach der Rückgabe der ersten 200 Zeilen 50 % der Zeilen abgelehnt werden.The PolyBase query fails with 50% rejected rows after attempting to return the first 200 rows. Beachten Sie, dass übereinstimmende Zeilen zurückgegeben wurden, bevor die PolyBase-Abfrage erkennt, dass der Schwellenwert zum Zurückweisen überschritten wurde.Note that matching rows have been returned before the PolyBase query detects the reject threshold has been exceeded.

REJECTED_ROW_LOCATION = VerzeichnisREJECTED_ROW_LOCATION = Directory Location

Gibt das Verzeichnis in der externen Datenquelle an, in das die abgelehnten Zeilen und die entsprechende Fehlerdatei geschrieben werden sollen.Specifies the directory within the External Data Source that the rejected rows and the corresponding error file should be written. Ist das angegebene Verzeichnis nicht vorhanden, wird es von PolyBase für Sie erstellt.If the specified path does not exist, PolyBase will create one on your behalf. Es wird ein untergeordnetes Verzeichnis mit dem Namen „rejectedrows“ erstellt. Mit dem „“-Zeichen wird sichergestellt, dass das Verzeichnis für andere Datenverarbeitungsvorgänge übergangen wird, es sei denn, es ist explizit im LOCATION-Parameter angegeben.A child directory is created with the name "rejectedrows". The "" character ensures that the directory is escaped for other data processing unless explicitly named in the location parameter. In diesem Verzeichnis befindet sich ein Ordner, der ausgehend von der Zeit der Lastübermittlung im Format JahrMonatTag-StundeMinuteSekunde erstellt wurde (z. B.Within this directory, there is a folder created based on the time of load submission in the format YearMonthDay -HourMinuteSecond (Ex. 20180330-173205).20180330-173205). In diesen Ordner werden zwei Arten von Dateien geschrieben: die Ursachendatei (_reason-Datei) und die Datendatei.In this folder, two types of files are written, the _reason file and the data file.

Sowohl die Ursachendateien als auch die Datendateien haben die „queryID“, die der CTAS-Anweisung zugeordnet ist.The reason files and the data files both have the queryID associated with the CTAS statement. Da die Daten und die Ursachen in getrennten Dateien gespeichert sind, haben die zugehörigen Dateien ein entsprechendes Suffix.Because the data and the reason are in separate files corresponding files have a matching suffix.

Externe ShardtabellenoptionenSharded external table options
Gibt die externe Datenquelle (eine nicht-SQL Server-Datenquelle) und eine Verteilungsmethode für die elastische Datenbankabfrage an.Specifies the external data source (a non-SQL Server data source) and a distribution method for the Elastic Database query.

DATA_SOURCEDATA_SOURCE
Eine externe Datenquelle wie Daten, die in einem Hadoop-Dateisystem, Azure Blob Storage oder in einem Shardzuordnungs-Manager gespeichert sind.An external data source such as data stored in a Hadoop File System, Azure blob storage, or a shard map manager.

SCHEMA_NAMESCHEMA_NAME
Die SCHEMA_NAME-Klausel bietet die Möglichkeit, die externe Tabellendefinition einer Tabelle in einem anderen Schema auf der Remotedatenbank zuzuordnen.The SCHEMA_NAME clause provides the ability to map the external table definition to a table in a different schema on the remote database. Verwenden Sie diese Option, um zwischen Schemas zu unterscheiden, die auf den lokalen und Remotedatenbanken vorhanden sind.Use this to disambiguate between schemas that exist on both the local and remote databases.

OBJECT_NAMEOBJECT_NAME
Die OBJECT_NAME-Klausel bietet die Möglichkeit, die externe Tabellendefinition einer Tabelle mit einem anderen Namen auf der Remotedatenbank zuzuordnen.The OBJECT_NAME clause provides the ability to map the external table definition to a table with a different name on the remote database. Verwenden Sie diese Option, um zwischen Objektnamen zu unterscheiden, die auf den lokalen und Remotedatenbanken vorhanden sind.Use this to disambiguate between object names that exist on both the local and remote databases.

DISTRIBUTIONDISTRIBUTION
Optional.Optional. Dies ist nur für Datenbanken des Typs SHARD_MAP_MANAGER erforderlich.This is only required only for databases of type SHARD_MAP_MANAGER. Steuert, ob eine Tabelle als Tabelle mit Shards oder replizierte Tabelle behandelt wird.This controls whether a table is treated as a sharded table or a replicated table. Mit SHARDED-Tabellen (Spaltenname) überlappen die Daten aus unterschiedlichen Tabellen nicht.With SHARDED (column name) tables, the data from different tables do not overlap. REPLICATED gibt an, dass Tabellen dieselben Daten auf jeder Shard enthalten.REPLICATED specifies that tables have the same data on every shard. ROUND_ROBIN gibt an, dass eine anwendungsspezifische Methode zum Verteilen von Daten verwendet wird.ROUND_ROBIN indicates that an application-specific method is used to distribute the data.

BerechtigungenPermissions

Folgende Benutzerberechtigungen sind erforderlich:Requires these user permissions:

  • CREATE TABLECREATE TABLE

  • ALTER ANY SCHEMAALTER ANY SCHEMA

  • ALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL DATA SOURCE

  • ALTER ANY EXTERNAL FILE FORMATALTER ANY EXTERNAL FILE FORMAT

  • CONTROL DATABASECONTROL DATABASE

Beachten Sie, dass die Anmeldung, die die externe Datenquelle erstellt, die Berechtigung zum Lesen und Schreiben in der externen Datenquelle, die in Hadoop oder Azure Blob Storage gespeichert ist, benötigt.Note, the login that creates the external data source must have permission to read and write to the external data source, located in Hadoop or Azure blob storage.

Wichtig

Mit der Berechtigung ALTER ANY EXTERNAL DATA SOURCE besitzt jeder Prinzipal die Fähigkeit, alle externen Datenquellenobjekte zu erstellen und zu ändern. Damit können sie auch auf alle datenbankweit gültigen Anmeldeinformationen der Datenbank zugreifen.The ALTER ANY EXTERNAL DATA SOURCE permission grants any principal the ability to create and modify any external data source object, and therefore, it also grants the ability to access all database scoped credentials on the database. Da es sich hierbei um eine weitreichende Berechtigung handelt, darf sie nur vertrauenswürdigen Prinzipalen innerhalb des Systems erteilt werden.This permission must be considered as highly privileged, and therefore must be granted only to trusted principals in the system.

FehlerbehandlungError Handling

Beim Ausführen der CREATE EXTERNAL TABLE-Anweisung versucht PolyBase, eine Verbindung mit der externen Datenquelle herzustellen.While executing the CREATE EXTERNAL TABLE statement, PolyBase attempts to connect to the external data source. Tritt bei der Verbindung ein Fehler auf, schlägt die Anweisung fehl. Die externe Tabelle wird nicht erstellt.If the attempt to connect fails, the statement will fail and the external table will not be created. Da PolyBase erneut versucht, die Verbindung aufzubauen, bevor die Abfrage endgültig fehlschlägt, kann es eine Minute oder länger dauern, bis der Befehl fehlschlägt.It can take a minute or more for the command to fail since PolyBase retries the connection before eventually failing the query.

Allgemeine HinweiseGeneral Remarks

PolyBase speichert die aus der externen Datenquelle abgerufenen Zeilen in Szenarios mit Ad-hoc-Abfragen, d.h. bei SELECT FROM EXTERNAL TABLE, in einer temporären Tabelle.In ad-hoc query scenarios, i.e. SELECT FROM EXTERNAL TABLE, PolyBase stores the rows retrieved from the external data source in a temporary table. Nachdem die Abfrage abgeschlossen ist, entfernt und löscht PolyBase die temporäre Tabelle.After the query completes, PolyBase removes and deletes the temporary table. Es werden keine permanenten Daten in SQL-Tabellen gespeichert.No permanent data is stored in SQL tables.

Im Gegensatz dazu speichert PolyBase die aus der externen Datenquelle abgerufenen Zeilen in Importszenarios, d.h. bei SELECT INTO FROM EXTERNAL TABLE, permanent in einer SQL-Tabelle.In contrast, in the import scenario, i.e. SELECT INTO FROM EXTERNAL TABLE, PolyBase stores the rows retrieved from the external data source as permanent data in the SQL table. Die neue Tabelle wird beim Ausführen der Abfrage erstellt, wenn PolyBase die externen Daten abruft.The new table is created during query execution when PolyBase retrieves the external data.

PolyBase kann einen Teil der Abfrageberechnung an Hadoop übertragen, um die Abfrageleistung zu verbessern.PolyBase can push some of the query computation to Hadoop to improve query performance. Dies wird als Prädikatweitergabe bezeichnet.This is called predicate pushdown. Um dies zu aktivieren, geben Sie die Option „Resource Manager Location“ von Hadoop in CREATE EXTERNAL DATA SOURCE (Transact-SQL) an.To enable this, specify the Hadoop resource manager location option in CREATE EXTERNAL DATA SOURCE (Transact-SQL).

Sie können zahlreiche externe Tabellen erstellen, die auf die gleichen oder andere externe Datenquellen verweisen.You can create numerous external tables that reference the same or different external data sources.

EinschränkungenLimitations and Restrictions

In CTP2 wird die Exportfunktion nicht unterstützt. Beispielsweise werden SQL-Daten in der externen Datenquelle permanent gespeichert.In CTP2, the export functionality is not supported, i.e. permanently storing SQL data into the external data source. Diese Funktion wird in CTP3 verfügbar sein.This functionality will be available in CTP3.

Da sich die Daten für eine externe Tabelle nicht auf dem Gerät befinden, werden sie nicht von PolyBase kontrolliert und können jederzeit von einem externen Prozess geändert oder gelöscht werden.Since the data for an external table resides off the appliance, it is not under the control of PolyBase, and can be changed or removed at any time by an external process. Aus diesem Grund sind Abfrageergebnisse für eine externe Tabelle nicht garantiert deterministisch.Because of this, query results against an external table are not guaranteed to be deterministic. Die gleiche Abfrage kann bei jeder Ausführung für eine externe Tabelle unterschiedliche Ergebnisse zurückgeben.The same query can return different results each time it runs against an external table. Auf ähnliche Weise kann eine Abfrage fehlschlagen, wenn die externen Daten entfernt oder verschoben werden.Similarly, a query can fail if the external data is removed or relocated.

Sie können zahlreiche externe Tabellen erstellen, die alle auf unterschiedliche externe Datenquellen verweisen.You can create multiple external tables that each reference different external data sources. Wenn Sie jedoch Abfragen für verschiedene Hadoop-Datenquellen gleichzeitig ausführen, muss jede Hadoop-Datenquelle die gleiche „Hadoop Connectivity“-Serverkonfigurationseinstellung verwenden.However, if you simultaneously run queries against different Hadoop data sources, then each Hadoop source must use the same 'hadoop connectivity' server configuration setting. Beispielsweise können Sie nicht gleichzeitig eine Abfrage für einen Cloudera Hadoop-Cluster und einen Hortonworks Hadoop-Cluster ausführen, da diese unterschiedliche Konfigurationseinstellungen verwenden.For example, you can't simultaneously run a query against a Cloudera Hadoop cluster and a Hortonworks Hadoop cluster since these use different configuration settings. Weitere Informationen zu den Konfigurationseinstellungen und den unterstützten Kombinationen finden Sie unter Konfiguration der PolyBase-Netzwerkkonnektivität (Transact-SQL).For the configuration settings and supported combinations, see PolyBase Connectivity Configuration (Transact-SQL).

Nur diese DDL-Anweisungen (Data Definition Language) sind in externen Tabellen zulässig:Only these Data Definition Language (DDL) statements are allowed on external tables:

  • CREATE TABLE und DROP TABLECREATE TABLE and DROP TABLE

  • CREATE STATISTICS und DROP STATISTICSCREATE STATISTICS and DROP STATISTICS
    Hinweis: CREATE und DROP STATISTICS werden nicht auf externen Tabellen in Azure SQL-Datenbank unterstützt.Note: CREATE and DROP STATISTICS on external tables are not supported in Azure SQL Database.

  • CREATE VIEW und DROP VIEWCREATE VIEW and DROP VIEW

Nicht unterstützte Konstruktionen und Operationen:Constructs and operations not supported:

  • Die DEFAULT-Einschränkung auf externen TabellenspaltenThe DEFAULT constraint on external table columns

  • DML-Vorgänge (Data Manipulation Language): DELETE, INSERT und UPDATEData Manipulation Language (DML) operations of delete, insert, and update

Abfrageeinschränkungen:Query limitations:

PolyBase kann bei 32 gleichzeitigen PolyBase-Abfragen maximal 33.000 Dateien pro Ordner verarbeiten.PolyBase can consume a maximum of 33k files per folder when running 32 concurrent PolyBase queries. Diese maximale Anzahl schließt sowohl Dateien als auch Unterordner im jeweiligen HDFS-Ordner ein.This maximum number includes both files and subfolders in each HDFS folder. Werden weniger als 32 Abfragen gleichzeitig ausgeführt, können auch PolyBase-Abfragen für Ordner in HDFS mit mehr als 33.000 Dateien ausgeführt werden.If the degree of concurrency is less than 32, a user can run PolyBase queries against folders in HDFS which contain more than 33k files. Es wird empfohlen, dass Sie externe Dateipfade kurz halten und nicht mehr als 30.000 Dateien pro HDFS-Ordner verwenden.We recommend that you keep external file paths short and use no more than 30k files per HDFS folder. Wenn auf zu viele Dateien verwiesen wird, kann eine Out-of-Memory-Ausnahme von Java Virtual Machine (JVM) auftreten.When too many files are referenced, a Java Virtual Machine (JVM) out-of-memory exception might occur.

Einschränkungen der Tabellenbreite: PolyBase in SQL Server 2016 verfügt über eine Begrenzung für die Zeilenbreite von 32 KB, basierend auf der Maximalgröße einer einzelnen gültigen Zeile je Tabellendefinition.Table width limitations: PolyBase in SQL Server 2016 has a row width limit of 32KB based on the maximum size of a single valid row by table definition. Wenn die Summe des Spaltenschemas größer als 32 KB ist, wird PolyBase die Daten nicht abfragen können.If the sum of the column schema is greater than 32KB, PolyBase will not be able to query the data.

Diese Einschränkung wurde in SQL Data Warehouse auf 1 MB erhöht.In SQL Data Warehouse, this limitation has been raised to 1MB.

SperrenLocking

Freigegebene Sperre für das SCHEMARESOLUTION-Objekt.Shared lock on the SCHEMARESOLUTION object.

SecuritySecurity

Die Datendateien für eine externe Tabelle werden in Hadoop oder Azure Blob Storage gespeichert.The data files for an external table is stored in Hadoop or Azure blob storage. Diese Datendateien werden von Ihrem eigenen Prozess erstellt und verwaltet.These data files are created and managed by your own processes. Die Sicherheit der externen Daten liegt in Ihrer Verantwortung.It is your responsibility to manage the security of the external data.

BeispieleExamples

A.A. Erstellen einer externen Tabelle mit Daten im TexttrennzeichenformatCreate an external table with data in text-delimited format.

Dieses Beispiel zeigt die erforderlichen Schritte zur Erstellung einer externen Tabelle, die Daten in Texttrennzeichendateien formatiert.This example shows all the steps required to create an external table that has data formatted in text-delimited files. Es definiert eine externe Datenquelle mydatasource und ein externes Dateiformat myfileformat.It defines an external data source mydatasource and an external file format myfileformat. In der CREATE EXTERNAL TABLE-Anweisung wird dann auf diese Objekte auf Datenbankebene verwiesen.These database-level objects are then referenced in the CREATE EXTERNAL TABLE statement. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) und unter CREATE EXTERNAL FILE FORMAT (Transact-SQL).For more information, see CREATE EXTERNAL DATA SOURCE (Transact-SQL) and CREATE EXTERNAL FILE FORMAT (Transact-SQL).

  
CREATE EXTERNAL DATA SOURCE mydatasource  
WITH (  
    TYPE = HADOOP,  
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'  
)  
  
CREATE EXTERNAL FILE FORMAT myfileformat  
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT,   
    FORMAT_OPTIONS (FIELD_TERMINATOR ='|')  
);  
  
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  
    )  
;  
  

B.B. Erstellen einer externen Tabelle mit Daten im RCFile-FormatCreate an external table with data in RCFile format.

Dieses Beispiel zeigt die erforderlichen Schritte zur Erstellung einer externen Tabelle, die Daten als RCFiles formatiert.This example shows all the steps required to create an external table that has data formatted as RCFiles. Es definiert eine externe Datenquelle mydatasource_rc und ein externes Dateiformat mfileformat_rc.It defines an external data source mydatasource_rc and an external file format myfileformat_rc. In der CREATE EXTERNAL TABLE-Anweisung wird dann auf diese Objekte auf Datenbankebene verwiesen.These database-level objects are then referenced in the CREATE EXTERNAL TABLE statement. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) und unter CREATE EXTERNAL FILE FORMAT (Transact-SQL).For more information, see CREATE EXTERNAL DATA SOURCE (Transact-SQL) and CREATE EXTERNAL FILE FORMAT (Transact-SQL).

  
CREATE EXTERNAL DATA SOURCE mydatasource_rc  
WITH (  
    TYPE = HADOOP,  
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'  
)  
  
CREATE EXTERNAL FILE FORMAT myfileformat_rc  
WITH (  
    FORMAT_TYPE = RCFILE,  
    SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'  
)  
;  
  
CREATE EXTERNAL TABLE ClickStream_rc (   
    url varchar(50),  
    event_date date,  
    user_ip varchar(50)  
)  
WITH (  
        LOCATION='/webdata/employee_rc.tbl',  
        DATA_SOURCE = mydatasource_rc,  
        FILE_FORMAT = myfileformat_rc  
    )  
;  
  

C.C. Erstellen einer externen Tabelle mit Daten im ORC-FormatCreate an external table with data in ORC format.

Dieses Beispiel zeigt die erforderlichen Schritte zur Erstellung einer externen Tabelle, die Daten als ORC-Dateien formatiert.This example shows all the steps required to create an external table that has data formatted as ORC files. Es definiert eine externe Datenquelle mydatasource_orc und ein externes Dateiformat myfileformat_orc.It defines an external data source mydatasource_orc and an external file format myfileformat_orc. In der CREATE EXTERNAL TABLE-Anweisung wird dann auf diese Objekte auf Datenbankebene verwiesen.These database-level objects are then referenced in the CREATE EXTERNAL TABLE statement. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) und unter CREATE EXTERNAL FILE FORMAT (Transact-SQL).For more information, see CREATE EXTERNAL DATA SOURCE (Transact-SQL) and CREATE EXTERNAL FILE FORMAT (Transact-SQL).

  
CREATE EXTERNAL DATA SOURCE mydatasource_orc  
WITH (  
    TYPE = HADOOP,  
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'  
)  
  
CREATE EXTERNAL FILE FORMAT myfileformat_orc  
WITH (  
    FORMAT = ORC,  
    COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'  
)  
;  
  
CREATE EXTERNAL TABLE ClickStream_orc (   
    url varchar(50),  
    event_date date,  
    user_ip varchar(50)  
)  
WITH (  
        LOCATION='/webdata/',  
        DATA_SOURCE = mydatasource_orc,  
        FILE_FORMAT = myfileformat_orc  
    )  
;  
  

D.D. Abfragen von Hadoop-DatenQuerying Hadoop data

Clickstream ist eine externe Tabelle, die mit der durch Tabstopps getrennte Textdatei „employee.tbl“ in einem Hadoop-Cluster verbunden ist.Clickstream is an external table that connects to the employee.tbl delimited text file on a Hadoop cluster. Die folgende Abfrage sieht wie eine Abfrage für eine Standardtabelle aus.The following query looks just like a query against a standard table. Allerdings ruft diese Abfrage Daten aus Hadoop ab und berechnet dann die Ergebnisse.However, this query retrieves data from Hadoop and then computes the results.

SELECT TOP 10 (url) FROM ClickStream WHERE user_ip = 'xxx.xxx.xxx.xxx'  
;  

E.E. Verknüpfen von Hadoop-Daten mit SQL-DatenJoin Hadoop data with SQL data

Diese Abfrage sieht wie ein Standard-JOIN für zwei SQL-Tabellen aus.This query looks just like a standard JOIN on two SQL tables. Der Unterschied besteht darin, dass PolyBase die Clickstream-Daten aus Hadoop abruft und sie dann der UrlDescription-Tabelle hinzufügt.The difference is that PolyBase retrieves the Clickstream data from Hadoop and then joins it to the UrlDescription table. Eine Tabelle ist eine externe Tabelle, und die andere ist eine standardmäßige SQL-Tabelle.One table is an external table and the other is a standard SQL table.

SELECT url.description  
FROM ClickStream cs  
JOIN UrlDescription url ON cs.url = url.name  
WHERE cs.url = 'msdn.microsoft.com'  
;  

F.F. Importieren Sie Daten aus Hadoop in eine SQL-TabelleImport data from Hadoop into a SQL table

Dieses Beispiel erstellt eine neue „ms_user“-SQL-Tabelle, die das Ergebnis einer Verknüpfung zwischen der standardmäßigen SQL-Tabelle user und der externen Tabelle ClickStream permanent speichert.This example creates a new SQL table ms_user that permanently stores the result of a join between the standard SQL table user and the external table ClickStream.

SELECT DISTINCT user.FirstName, user.LastName  
INTO ms_user  
FROM user INNER JOIN (  
    SELECT * FROM ClickStream WHERE cs.url = 'www.microsoft.com'  
    ) AS ms_user  
ON user.user_ip = ms.user_ip  
;  
  

G.G. Erstellen einer externen Tabelle für eine Datenquelle mit ShardsCreate an external table for a sharded data source

In diesem Beispiel wird eine Remote-DMV mithilfe der Klauseln SCHEMA_NAME und OBJECT_NAME einer externen Tabelle zugeordnet.This example remaps a remote DMV to an external table using the SCHEMA_NAME and OBJECT_NAME clauses.

CREATE EXTERNAL TABLE [dbo].[all_dm_exec_requests]([session_id] smallint NOT NULL,  
  [request_id] int NOT NULL,  
  [start_time] datetime NOT NULL,   
  [status] nvarchar(30) NOT NULL,  
  [command] nvarchar(32) NOT NULL,  
  [sql_handle] varbinary(64),  
  [statement_start_offset] int,  
  [statement_end_offset] int,  
  [cpu_time] int NOT NULL)  
WITH  
(  
  DATA_SOURCE = MyExtSrc,  
  SCHEMA_NAME = 'sys',  
  OBJECT_NAME = 'dm_exec_requests',  
  DISTRIBUTION=ROUND_ROBIN  
);   

Beispiele: Azure SQL Data WarehouseAzure SQL Data Warehouse und Parallel Data WarehouseParallel Data Warehouse.Examples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

H.H. Importieren von Daten aus ADLS in Azure SQL Data WarehouseSQL Data WarehouseImporting Data from ADLS into Azure SQL Data WarehouseSQL Data Warehouse


-- These values come from your Azure Active Directory Application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLUser 
WITH IDENTITY = '<clientID>@\<OAuth2.0TokenEndPoint>',
SECRET = '<KEY>' ;


CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (TYPE = HADOOP,
      LOCATION = 'adl://pbasetr.azuredatalakestore.net'
)



CREATE EXTERNAL FILE FORMAT TextFileFormat 
WITH
(
    FORMAT_TYPE = DELIMITEDTEXT 
    , FORMAT_OPTIONS ( FIELDTERMINATOR = '|' 
                     , STRINGDELIMITER = '' 
                     , DATEFORMAT = 'yyyy-MM-dd HH:mm:ss.fff' 
                     , USETYPE_DEFAULT = FALSE 
                     ) 
)


CREATE EXTERNAL TABLE [dbo].[DimProductexternal] 
( [ProductKey] [int] NOT NULL, 
  [ProductLabel] nvarchar NULL, 
  [ProductName] nvarchar NULL ) 
WITH
(
    LOCATION='/DimProduct/' , 
    DATA_SOURCE = AzureDataLakeStore , 
    FILE_FORMAT = TextFileFormat , 
    REJECT_TYPE = VALUE ,
    REJECT_VALUE = 0
) ;


CREATE TABLE [dbo].[DimProduct] 
WITH (DISTRIBUTION = HASH([ProductKey] ) ) 
AS SELECT * FROM 
[dbo].[DimProduct_external] ; 
     

I.I. Verknüpfen externer TabellenJoin external tables

SELECT url.description  
FROM ClickStream cs  
JOIN UrlDescription url ON cs.url = url.name  
WHERE cs.url = 'msdn.microsoft.com'  
;  

J.J. Verknüpfen von HDFS-Daten mit PDW-DatenJoin HDFS data with PDW data

SELECT cs.user_ip FROM ClickStream cs  
JOIN User u ON cs.user_ip = u.user_ip  
WHERE cs.url = 'www.microsoft.com'  
;  
  

K.K. Importieren von Zeilendaten aus HDFS in eine verteilte PDW-TabelleImport row data from HDFS into a distributed PDW Table

CREATE TABLE ClickStream_PDW  
WITH ( DISTRIBUTION = HASH (url) )  
AS SELECT url, event_date, user_ip FROM ClickStream  
;  

L.L. Importieren von Zeilendaten aus HDFS in eine replizierte PDW-TabelleImport row data from HDFS into a replicated PDW Table

CREATE TABLE ClickStream_PDW  
WITH ( DISTRIBUTION = REPLICATE )  
AS SELECT url, event_date, user_ip   
FROM ClickStream  
;  

Weitere InformationenSee Also

Beispiele für Metadatenabfrage (SQL Server PDW) Common Metadata Query Examples (SQL Server PDW)
CREATE EXTERNAL DATA SOURCE (Transact-SQL) CREATE EXTERNAL DATA SOURCE (Transact-SQL)
CREATE EXTERNAL FILE FORMAT (Transact-SQL) CREATE EXTERNAL FILE FORMAT (Transact-SQL)
CREATE EXTERNAL TABLE AS SELECT (Transact-SQL) CREATE EXTERNAL TABLE AS SELECT (Transact-SQL)
CREATE TABLE AS SELECT (Azure SQL Data Warehouse)CREATE TABLE AS SELECT (Azure SQL Data Warehouse)