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

Erstellt eine externe Tabelle.Creates an external table

Dieser Artikel stellt die Syntax, Argumente, Anweisungen, Berechtigungen und Beispiele für das SQL-Produkt Ihrer Wahl bereit.This article provides the syntax, arguments, remarks, permissions, and examples for whichever SQL product you choose.

Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

Wählen Sie ein Produkt.Click a product!

Klicken Sie in der folgenden Zeile auf den Namen des Produkts, das Sie am meisten interessiert.In the following row, click whichever product name you are interested in. Mit nur einem Klick erhalten Sie auf dieser Webseite unterschiedliche Inhalte, die zu dem Produkt passen, das Sie ausgewählt haben.The click displays different content here on this webpage, appropriate for whichever product you click.

** * SQL Server * **  * SQL Server *   SQL-DatenbankSQL Database SQL Data
Warehouse
SQL Data
Warehouse
Analytics Platform
System (PDW)
Analytics Platform
System (PDW)

 

Übersicht: SQL ServerOverview: SQL Server

Dieser Befehl erstellt eine externe Tabelle für PolyBase, 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.This command creates an external table for PolyBase to access data stored in a Hadoop cluster or Azure blob storage PolyBase external table that references data stored in a Hadoop cluster or Azure blob storage.

GILT FÜR: SQL Server 2016 (oder höher)APPLIES TO: SQL Server 2016 (or higher)

Verwendet eine externe Tabelle mit einer externen Datenquelle für PolyBase-Abfragen.Use an external table with an external data source for PolyBase queries. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:External data sources are used to establish connectivity and support these primary use cases:

  • Datenvirtualisierung und Laden von Dateien mithilfe von PolyBaseData virtualization and data load using PolyBase
  • Massenladevorgänge mit SQL Server oder SQL-Datenbank mithilfe von BULK INSERT oder OPENROWSETBulk load operations using SQL Server or SQL Database using BULK INSERT or OPENROWSET

Siehe auch CREATE EXTERNAL DATA SOURCE und DROP EXTERNAL TABLE.See also CREATE EXTERNAL DATA SOURCE and DROP EXTERNAL TABLE.

SyntaxSyntax

-- Create a new external table
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_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
}

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

ArgumenteArguments

{ database_name.schema_name.table_name | schema_name.table_name | table_name } : Der ein- bis dreiteilige Name der zu erstellenden Tabelle.{ database_name.schema_name.table_name | schema_name.table_name | table_name } The one to three-part name of the table to create. Für eine externe Tabelle speichert SQL nur die Metadaten der Tabelle mit den grundlegenden Statistiken über die Datei oder den Ordner, auf die in Hadoop oder Azure Blob Storage verwiesen wird.For an external table, SQL stores only the table metadata along with basic statistics about the file or folder that is 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 unterstützt die Möglichkeit, Spaltenname, Datentyp, NULL-Zulässigkeit und Sortierung zu konfigurieren.<column_definition> [ ,...n ] CREATE EXTERNAL TABLE supports the ability to configure column name, data type, nullability and collation. Sie können DEFAULT CONSTRAINT nicht für externe Tabellen verwenden.You can't use the DEFAULT CONSTRAINT on external tables.

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's a mismatch, the file rows will be rejected when querying the actual data.

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.LOCATION = 'folder_or_filepath' 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.The location starts from the root folder. Der Stammordner ist der in der externen Datenquelle angegebene Datenspeicherort.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 doesn't 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.

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. PolyBase gibt wie Hadoop keine ausgeblendeten Ordner zurück.Just like Hadoop, PolyBase doesn't return hidden folders. Es werden auch keine Dateien zurückgegeben, deren Dateiname mit einem Unterstrich () oder einem Punkt (.) beginnt.It also doesn't 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 eines ausgeblendeten Ordners handelt.It won't return mydata3.txt because it's a subfolder of a hidden folder. Es werden auch keine „_hidden.txt“-Dateien zurückgegeben, da es sich um eine ausgeblendete Datei handelt.And it won't return _hidden.txt because it's 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_name: Gibt den Namen der externen Datenquelle an, die den Speicherort der externen Daten enthält.DATA_SOURCE = external_data_source_name 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.To create an external data source, use CREATE EXTERNAL DATA SOURCE.

FILE_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.FILE_FORMAT = external_file_format_name 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.To create an external file format, use CREATE EXTERNAL FILE FORMAT.

Reject-Optionen: Sie können Reject-Parameter angeben, die bestimmen, wie PolyBase modifizierte Datensätze behandelt, die aus der externen Datenquelle abgerufen werden.Reject Options 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 don't match the column definitions of the external table.

Wenn Sie die Reject-Werte nicht angeben oder ändern, verwendet PolyBase Standardwerte.When you don't 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. Die Abfrage gibt (Teil-) Ergebnisse zurück, bis der Reject-Schwellenwert überschritten wird.The query will return (partial) results until the reject threshold is exceeded. Daraufhin wird eine entsprechende Fehlermeldung ausgelöst.It then fails with the appropriate error message.

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

value: REJECT_VALUE ist ein Literalwert und kein Prozentsatz.value 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.

Die SELECT-Abfrage von PolyBase schlägt beispielsweise bei „REJECT_VALUE = 5“ und „REJECT_TYPE = value“ fehl, nachdem fünf Zeilen abgelehnt wurden.For example, if REJECT_VALUE = 5 and REJECT_TYPE = value, the PolyBase SELECT query will fail after five rows have been rejected.

percentage: REJECT_VALUE ist ein Prozentsatz und kein Literalwert.percentage 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_value: Gibt den Wert oder den Prozentsatz der Zeilen an, die zurückgewiesen werden können, bevor die Abfrage fehlschlägt.REJECT_VALUE = reject_value 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_value: Dieses Attribut ist erforderlich, wenn Sie REJECT_TYPE = Prozentsatz angeben.REJECT_SAMPLE_VALUE = reject_sample_value 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 berechnete Prozentsatz fehlerhafter 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%. Aus diesem Grund wird PolyBase weiterhin versuchen, Daten aus der externen Datenquelle abzurufen.As a result, PolyBase will continue retrieving data from the external data source.
  • PolyBase versucht, die nächsten 100 Zeilen zu laden. Dieses Mal sind 25 Zeilen erfolgreich und 75 Zeilen fehlerhaft.PolyBase attempts to load the next 100 rows; this time 25 rows succeed and 75 rows 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.Notice that matching rows have been returned before the PolyBase query detects the reject threshold has been exceeded.

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

SCHEMA_NAME: Die SCHEMA_NAME-Klausel bietet die Möglichkeit, die externe Tabellendefinition einer Tabelle in einem anderen Schema auf der Remotedatenbank zuzuordnen.SCHEMA_NAME 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 Klausel, um zwischen Schemas zu unterscheiden, die auf den lokalen und Remotedatenbanken vorhanden sind.Use this clause to disambiguate between schemas that exist on both the local and remote databases.

OBJECT_NAME: Die OBJECT_NAME-Klausel bietet die Möglichkeit, die externe Tabellendefinition einer Tabelle mit einem anderen Namen auf der Remotedatenbank zuzuordnen.OBJECT_NAME 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 Klausel, um zwischen Objektnamen zu unterscheiden, die auf den lokalen und Remotedatenbanken vorhanden sind.Use this clause to disambiguate between object names that exist on both the local and remote databases.

DISTRIBUTION ist optional.DISTRIBUTION Optional. Dieses Argument ist für Datenbanken des Typs SHARD_MAP_MANAGER erforderlich.This argument is only required for databases of type SHARD_MAP_MANAGER. Dieses Argument steuert, ob eine Tabelle wie eine Tabelle mit Shards oder replizierte Tabelle behandelt wird.This argument controls whether a table is treated as a sharded table or a replicated table. Mit Tabellen des Typs SHARDED (Spaltenname) überlappen die Daten aus verschiedenen Tabellen nicht.With SHARDED (column name) tables, the data from different tables don't 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, beliebige externe Datenquellenobjekte zu erstellen und zu ändern. Damit ist auch der Zugriff auf alle datenbankweit gültigen Anmeldeinformationen der Datenbank möglich.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 won't 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, z.B. bei SELECT FROM EXTERNAL TABLE, in einer temporären Tabelle.In ad-hoc query scenarios, such as SELECT FROM EXTERNAL TABLE, PolyBase stores the rows that are 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, z.B. bei SELECT INTO FROM EXTERNAL TABLE, permanent in einer SQL-Tabelle.In contrast, in the import scenario, such as SELECT INTO FROM EXTERNAL TABLE, PolyBase stores the rows that are 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. Diese Aktion wird als Prädikatweitergabe bezeichnet.This action is called predicate pushdown. Um sie zu aktivieren, geben Sie die Option „Resource Manager Location“ von Hadoop in CREATE EXTERNAL DATA SOURCE an.To enable it, specify the Hadoop resource manager location option in CREATE EXTERNAL DATA SOURCE.

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

EinschränkungenLimitations and Restrictions

Da sich die Daten für eine externe Tabelle nicht in SQL Server 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 is not within SQL Server, it isn't 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.As a result, query results against an external table aren't 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 verschoben oder entfernt werden.Similarly, a query might fail if the external data is moved or removed.

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 Abfragen für verschiedene Hadoop-Datenquellen gleichzeitig ausführen, muss jede Hadoop-Datenquelle die gleiche „Hadoop Connectivity“-Serverkonfigurationseinstellung verwenden.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.For the configuration settings and supported combinations, see PolyBase Connectivity Configuration.

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
  • 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 ausgeführt werden, die mehr als 33.000 Dateien enthalten.If the degree of concurrency is less than 32, a user can run PolyBase queries against folders in HDFS that 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:Table width limitations:

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.PolyBase in SQL Server 2016 has a row width limit of 32 KB based on the maximum size of a single valid row by table definition. Wenn die Summe des Spaltenschemas größer als 32 KB ist, kann PolyBase die Daten nicht abfragen.If the sum of the column schema is greater than 32 KB, PolyBase can't query the data.

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 are 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 und unter CREATE EXTERNAL FILE FORMAT.For more information, see CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

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 und unter CREATE EXTERNAL FILE FORMAT.For more information, see CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

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 und unter CREATE EXTERNAL FILE FORMAT.For more information, see CREATE EXTERNAL DATA SOURCE and CREATE EXTERNAL FILE FORMAT.

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=  
);

H.H. Erstellen einer externen Tabelle für SQL ServerCreate an external table for SQL Server

     -- Create a Master Key
      CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo';
    GO
     /*  specify credentials to external data source
     *  IDENTITY: user name for external source.
     *  SECRET: password for external source.
     */
     CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials
     WITH IDENTITY = 'username', Secret = 'password';
    GO

    /* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
    * PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
    * CREDENTIAL: the database scoped credential, created above.
    */
    CREATE EXTERNAL DATA SOURCE SQLServerInstance
    WITH ( 
    LOCATION = 'sqlserver://SqlServer',
    -- PUSHDOWN = ON | OFF,
      CREDENTIAL = SQLServerCredentials
    );
    GO

    CREATE SCHEMA sqlserver;
    GO

     /* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format
     * DATA_SOURCE: the external data source, created above.
     */
     CREATE EXTERNAL TABLE sqlserver.customer(
     C_CUSTKEY INT NOT NULL,
     C_NAME VARCHAR(25) NOT NULL,
     C_ADDRESS VARCHAR(40) NOT NULL,
     C_NATIONKEY INT NOT NULL,
     C_PHONE CHAR(15) NOT NULL,
     C_ACCTBAL DECIMAL(15,2) NOT NULL,
     C_MKTSEGMENT CHAR(10) NOT NULL,
     C_COMMENT VARCHAR(117) NOT NULL
      )
      WITH (
      LOCATION='tpch_10.dbo.customer',
      DATA_SOURCE=SqlServerInstance
     );

I.I. Erstellen einer externen Tabelle für OracleCreate an external table for Oracle

  -- Create a Master Key
   CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
   /*
   * Specify credentials to external data source
   * IDENTITY: user name for external source.
   * SECRET: password for external source.
   */
   CREATE DATABASE SCOPED CREDENTIAL credential_name
   WITH IDENTITY = 'username', Secret = 'password';

   /* 
   * LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
   * PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
   * CONNECTION_OPTIONS: Specify driver location
   * CREDENTIAL: the database scoped credential, created above.
   */
   CREATE EXTERNAL DATA SOURCE external_data_source_name
   WITH ( 
     LOCATION = 'oracle://<server address>[:<port>]',
     -- PUSHDOWN = ON | OFF,
     CREDENTIAL = credential_name)

   /*
   * LOCATION: Oracle table/view in '<database_name>.<schema_name>.<object_name>' format
   * DATA_SOURCE: the external data source, created above.
   */
   CREATE EXTERNAL TABLE customers(
   [O_ORDERKEY] DECIMAL(38) NOT NULL,
   [O_CUSTKEY] DECIMAL(38) NOT NULL,
   [O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
   [O_TOTALPRICE] DECIMAL(15,2) NOT NULL,
   [O_ORDERDATE] DATETIME2(0) NOT NULL,
   [O_ORDERPRIORITY] CHAR(15) COLLATE Latin1_General_BIN NOT NULL,
   [O_CLERK] CHAR(15) COLLATE Latin1_General_BIN NOT NULL,
   [O_SHIPPRIORITY] DECIMAL(38) NOT NULL,
   [O_COMMENT] VARCHAR(79) COLLATE Latin1_General_BIN NOT NULL
   )
   WITH (
    LOCATION='customer',
    DATA_SOURCE= external_data_source_name
   );

J.J. Erstellen einer externen Tabelle für TeradataCreate an external table for Teradata

  -- Create a Master Key
   CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';

   /*
   * Specify credentials to external data source
   * IDENTITY: user name for external source.
   * SECRET: password for external source.
   */
   CREATE DATABASE SCOPED CREDENTIAL credential_name
   WITH IDENTITY = 'username', Secret = 'password';

    /* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
    * PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
    * CONNECTION_OPTIONS: Specify driver location
    * CREDENTIAL: the database scoped credential, created above.
    */
    CREATE EXTERNAL DATA SOURCE external_data_source_name
    WITH ( 
    LOCATION = teradata://<server address>[:<port>],
   -- PUSHDOWN = ON | OFF,
    CREDENTIAL =credential_name
    );


     /* LOCATION: Teradata table/view in '<database_name>.<object_name>' format
      * DATA_SOURCE: the external data source, created above.
      */
     CREATE EXTERNAL TABLE customer(
      L_ORDERKEY INT NOT NULL,
      L_PARTKEY INT NOT NULL,
     L_SUPPKEY INT NOT NULL,
     L_LINENUMBER INT NOT NULL,
     L_QUANTITY DECIMAL(15,2) NOT NULL,
     L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
     L_DISCOUNT DECIMAL(15,2) NOT NULL,
     L_TAX DECIMAL(15,2) NOT NULL,
     L_RETURNFLAG CHAR NOT NULL,
     L_LINESTATUS CHAR NOT NULL,
     L_SHIPDATE DATE NOT NULL,
     L_COMMITDATE DATE NOT NULL,
     L_RECEIPTDATE DATE NOT NULL,
     L_SHIPINSTRUCT CHAR(25) NOT NULL,
     L_SHIPMODE CHAR(10) NOT NULL,
     L_COMMENT VARCHAR(44) NOT NULL
     )
     WITH (
     LOCATION='customer',
     DATA_SOURCE= external_data_source_name
     );

K.K. Erstellen einer externen Tabelle für MongoDBCreate an external table for MongoDB

  -- Create a Master Key
   CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';

   /*
   * Specify credentials to external data source
   * IDENTITY: user name for external source.
   * SECRET: password for external source.
   */
   CREATE DATABASE SCOPED CREDENTIAL credential_name
   WITH IDENTITY = 'username', Secret = 'password';

     /* LOCATION: Location string should be of format '<type>://<server>[:<port>]'.
    * PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
    * CONNECTION_OPTIONS: Specify driver location
    * CREDENTIAL: the database scoped credential, created above.
    */
    CREATE EXTERNAL DATA SOURCE external_data_source_name
    WITH (
    LOCATION = mongodb://<server>[:<port>],
    -- PUSHDOWN = ON | OFF,
      CREDENTIAL = credential_name
    );

     /* LOCATION: MongoDB table/view in '<database_name>.<schema_name>.<object_name>' format
     * DATA_SOURCE: the external data source, created above.
     */
     CREATE EXTERNAL TABLE customers(
     [O_ORDERKEY] DECIMAL(38) NOT NULL,
     [O_CUSTKEY] DECIMAL(38) NOT NULL,
     [O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
     [O_TOTALPRICE] DECIMAL(15,2) NOT NULL,
     [O_ORDERDATE] DATETIME2(0) NOT NULL,
     [O_COMMENT] VARCHAR(79) COLLATE Latin1_General_BIN NOT NULL
     )
     WITH (
     LOCATION='customer',
     DATA_SOURCE= external_data_source_name
     );

Weitere InformationenSee Also

SQL ServerSQL Server ** * SQL-Datenbank * **  * SQL Database *   SQL Data
Warehouse
SQL Data
Warehouse
Analytics Platform
System (PDW)
Analytics Platform
System (PDW)

 

Übersicht: Azure SQL-DatenbankOverview: Azure SQL Database

Erstellt in Azure SQL-Datenbank eine externe Tabelle für elastische Abfragen für die Verwendung mit Azure SQL-Datenbank.In Azure SQL Database, creates an external table for elastic queries for use with Azure SQL Database.

Verwenden Sie eine externe Tabelle, um eine externe Tabelle für die Verwendung mit einer elastischen Abfrage zu erstellen.Use an external table toc reate an external table for use with an elastic query.

Siehe auch ERSTELLEN EINER EXTERNEN DATENQUELLE.See also CREATE EXTERNAL DATA SOURCE.

SyntaxSyntax

-- Create a table for use with elastic query  
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ ,...n ] )  
    WITH ( <sharded_external_table_options> )  
[;]  

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<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]]  
    )  
[;]  

ArgumenteArguments

{ database_name.schema_name.table_name | schema_name.table_name | table_name } : Der ein- bis dreiteilige Name der zu erstellenden Tabelle.{ database_name.schema_name.table_name | schema_name.table_name | table_name } The one to three-part name of the table to create. Für eine externe Tabelle speichert SQL nur die Metadaten der Tabelle mit den grundlegenden Statistiken über die Datei oder den Ordner, auf die in Azure SQL-Datenbank verwiesen wird.For an external table, SQL stores only the table metadata along with basic statistics about the file or folder that is referenced in Azure SQL Database. Es werden keine tatsächlichen Daten in Azure SQL-Datenbank verschoben oder gespeichert.No actual data is moved or stored in Azure SQL Database.

<Column_definition> [ ,...n ] CREATE EXTERNAL TABLE unterstützt die Möglichkeit, Spaltenname, Datentyp, NULL-Zulässigkeit und Sortierung zu konfigurieren.<column_definition> [ ,...n ] CREATE EXTERNAL TABLE supports the ability to configure column name, data type, nullability and collation. Sie können DEFAULT CONSTRAINT nicht für externe Tabellen verwenden.You can't use the DEFAULT CONSTRAINT on external tables.

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's a mismatch, the file rows will be rejected when querying the actual data.

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_SOURCE: Eine externe Datenquelle wie Daten, die in einem Hadoop-Dateisystem, Azure Blob Storage oder in einem Shardzuordnungs-Manager gespeichert sind.DATA_SOURCE An external data source such as data stored in a Hadoop File System, Azure blob storage, or a shard map manager.

SCHEMA_NAME: Die SCHEMA_NAME-Klausel bietet die Möglichkeit, die externe Tabellendefinition einer Tabelle in einem anderen Schema auf der Remotedatenbank zuzuordnen.SCHEMA_NAME 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 Klausel, um zwischen Schemas zu unterscheiden, die auf den lokalen und Remotedatenbanken vorhanden sind.Use this clause to disambiguate between schemas that exist on both the local and remote databases.

OBJECT_NAME: Die OBJECT_NAME-Klausel bietet die Möglichkeit, die externe Tabellendefinition einer Tabelle mit einem anderen Namen auf der Remotedatenbank zuzuordnen.OBJECT_NAME 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 Klausel, um zwischen Objektnamen zu unterscheiden, die auf den lokalen und Remotedatenbanken vorhanden sind.Use this clause to disambiguate between object names that exist on both the local and remote databases.

DISTRIBUTION ist optional.DISTRIBUTION Optional. Dieses Argument ist für Datenbanken des Typs SHARD_MAP_MANAGER erforderlich.This argument is only required for databases of type SHARD_MAP_MANAGER. Dieses Argument steuert, ob eine Tabelle wie eine Tabelle mit Shards oder replizierte Tabelle behandelt wird.This argument controls whether a table is treated as a sharded table or a replicated table. Mit Tabellen des Typs SHARDED (Spaltenname) überlappen die Daten aus verschiedenen Tabellen nicht.With SHARDED (column name) tables, the data from different tables don't 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, beliebige externe Datenquellenobjekte zu erstellen und zu ändern. Damit ist auch der Zugriff auf alle datenbankweit gültigen Anmeldeinformationen der Datenbank möglich.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

Wenn während der Ausführung der CREATE EXTERNAL TABLE-Anweisung beim Verbindungsversuch ein Fehler auftritt, schlägt die Anweisung fehl. Die externe Tabelle wird nicht erstellt.While executing the CREATE EXTERNAL TABLE statement, if the attempt to connect fails, the statement will fail and the external table won't be created. Da SQL-Datenbank 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 SQL Database retries the connection before eventually failing the query.

Allgemeine HinweiseGeneral Remarks

SQL-Datenbank speichert die aus der externen Datenquelle abgerufenen Zeilen in Szenarien mit Ad-hoc-Abfragen, z.B. bei SELECT FROM EXTERNAL TABLE, in einer temporären Tabelle.In ad-hoc query scenarios, such as SELECT FROM EXTERNAL TABLE, SQL Database stores the rows that are retrieved from the external data source in a temporary table. Nachdem die Abfrage abgeschlossen ist, entfernt und löscht SQL-Datenbank die temporäre Tabelle.After the query completes, SQL Database 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 SQL-Datenbank die aus der externen Datenquelle abgerufenen Zeilen in Importszenarien, z.B. bei SELECT INTO FROM EXTERNAL TABLE, permanent in einer SQL-Tabelle.In contrast, in the import scenario, such as SELECT INTO FROM EXTERNAL TABLE, SQL Database stores the rows that are retrieved from the external data source as permanent data in the SQL table. Die neue Tabelle wird beim Ausführen der Abfrage erstellt, wenn SQL-Datenbank die externen Daten abruft.The new table is created during query execution when SQL Database retrieves the external data.

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

EinschränkungenLimitations and Restrictions

Da sich die Daten für eine externe Tabelle in einer anderen SQL-Datenbank befinden, können Sie jederzeit geändert oder entfernt werden.Since the data for an external table is in another SQL Database, it can be changed or removed at any time. Aus diesem Grund sind Abfrageergebnisse für eine externe Tabelle nicht garantiert deterministisch.As a result, query results against an external table aren't 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 verschoben oder entfernt werden.Similarly, a query might fail if the external data is moved or removed.

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.

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 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

SperrenLocking

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

BeispieleExamples

A.A. Erstellen einer externen Tabelle für Azure SQL-DatenbankCreate external table for Azure SQL Database

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
( [CustomerID] [int] NOT NULL,
  [CustomerName] [varchar](50) NOT NULL,
  [Company] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)

Weitere InformationenSee Also

ERSTELLEN EINER EXTERNEN DATENQUELLECREATE EXTERNAL DATA SOURCE

SQL ServerSQL Server SQL-DatenbankSQL Database ** * SQL Data
Warehouse *
**  
* SQL Data
Warehouse *
 
Analytics Platform
System (PDW)
Analytics Platform
System (PDW)

 

Übersicht: Azure SQL Data WarehouseOverview: Azure SQL Data Warehouse

Verwenden Sie in Azure SQL Data Warehouse eine externe Tabelle, um:In Azure SQL Data Warehouse, 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 Azure SQL Data Warehouse zu importieren und speichern.Import and store data from Hadoop or Azure blob storage into Azure SQL Data Warehouse.
  • Daten aus Azure Data Lake Store in Azure SQL Data Warehouse zu importieren und zu speichern.Import and store data from Azure Data Lake Store into Azure SQL Data Warehouse.

Siehe auch CREATE EXTERNAL DATA SOURCE und DROP EXTERNAL TABLE.See also CREATE EXTERNAL DATA SOURCE and DROP EXTERNAL TABLE.

SyntaxSyntax

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_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 ] ]  
    )  
[;]  

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<reject_options> ::=  
{  
    | REJECT_TYPE = value | percentage,  
    | REJECT_VALUE = reject_value,  
    | REJECT_SAMPLE_VALUE = reject_sample_value,
    | REJECTED_ROW_LOCATION = '\REJECT_Directory'

}  

ArgumenteArguments

{ database_name.schema_name.table_name | schema_name.table_name | table_name } : Der ein- bis dreiteilige Name der zu erstellenden Tabelle.{ database_name.schema_name.table_name | schema_name.table_name | table_name } The one to three-part name of the table to create. Für eine externe Tabelle speichert SQL Data Warehouse nur die Metadaten der Tabelle mit den grundlegenden Statistiken über die Datei oder den Ordner, auf die in Azure Data Lake, Hadoop oder Azure Blob Storage verwiesen wird.For an external table, SQL Data Warehouse stores only the table metadata along with basic statistics about the file or folder that is referenced in Azure Data Lake, Hadoop, or Azure blob storage. Es werden keine tatsächlichen Daten in SQL Data Warehouse verschoben oder gespeichert.No actual data is moved or stored in SQL Data Warehouse.

<Column_definition> [ ,...n ] CREATE EXTERNAL TABLE unterstützt die Möglichkeit, Spaltenname, Datentyp, NULL-Zulässigkeit und Sortierung zu konfigurieren.<column_definition> [ ,...n ] CREATE EXTERNAL TABLE supports the ability to configure column name, data type, nullability and collation. Sie können DEFAULT CONSTRAINT nicht für externe Tabellen verwenden.You can't use the DEFAULT CONSTRAINT on external tables.

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's a mismatch, the file rows will be rejected when querying the actual data.

LOCATION = 'folder_or_filepath': Gibt den Ordner oder den Dateipfad und Dateinamen für die tatsächlichen Daten in Azure Data Lake, Hadoop oder Azure Blob Storage an.LOCATION = 'folder_or_filepath' Specifies the folder or the file path and file name for the actual data in Azure Data Lake, Hadoop, or Azure blob storage. Der Speicherort beginnt im Stammordner.The location starts from the root folder. Der Stammordner ist der in der externen Datenquelle angegebene Datenspeicherort.The root folder is the data location specified in the external data source. Die Anweisung CREATE EXTERNAL TABLE AS SELECT erstellt den Pfad und den Ordner, wenn diese noch nicht vorhanden sind.The CREATE EXTERNAL TABLE AS SELECT statement creates the path and folder if it doesn't exist. CREATE EXTERNAL TABLE erstellt den Pfad und den Ordner nicht.CREATE EXTERNAL TABLE doesn't 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. PolyBase gibt wie Hadoop keine ausgeblendeten Ordner zurück.Just like Hadoop, PolyBase doesn't return hidden folders. Es werden auch keine Dateien zurückgegeben, deren Dateiname mit einem Unterstrich () oder einem Punkt (.) beginnt.It also doesn't 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 eines ausgeblendeten Ordners handelt.It won't return mydata3.txt because it's a subfolder of a hidden folder. Es werden auch keine „_hidden.txt“-Dateien zurückgegeben, da es sich um eine ausgeblendete Datei handelt.And it won't return _hidden.txt because it's 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_name: Gibt den Namen der externen Datenquelle an, die den Speicherort der externen Daten enthält.DATA_SOURCE = external_data_source_name Specifies the name of the external data source that contains the location of the external data. Dieser Speicherort befindet sich in Azure Data Lake.This location is in Azure Data Lake. Verwenden Sie zum Erstellen einer externen Datenquelle CREATE EXTERNAL DATA SOURCE.To create an external data source, use CREATE EXTERNAL DATA SOURCE.

FILE_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.FILE_FORMAT = external_file_format_name 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.To create an external file format, use CREATE EXTERNAL FILE FORMAT.

Reject-Optionen: Sie können Reject-Parameter angeben, die bestimmen, wie PolyBase modifizierte Datensätze behandelt, die aus der externen Datenquelle abgerufen werden.Reject Options 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 don't match the column definitions of the external table.

Wenn Sie die Reject-Werte nicht angeben oder ändern, verwendet PolyBase Standardwerte.When you don't 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. Die Abfrage gibt (Teil-) Ergebnisse zurück, bis der Reject-Schwellenwert überschritten wird.The query will return (partial) results until the reject threshold is exceeded. Daraufhin wird eine entsprechende Fehlermeldung ausgelöst.It then fails with the appropriate error message.

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

value: REJECT_VALUE ist ein Literalwert und kein Prozentsatz.value 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.

Die SELECT-Abfrage von PolyBase schlägt beispielsweise bei „REJECT_VALUE = 5“ und „REJECT_TYPE = value“ fehl, nachdem fünf Zeilen abgelehnt wurden.For example, if REJECT_VALUE = 5 and REJECT_TYPE = value, the PolyBase SELECT query will fail after five rows have been rejected.

percentage: REJECT_VALUE ist ein Prozentsatz und kein Literalwert.percentage 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_value: Gibt den Wert oder den Prozentsatz der Zeilen an, die zurückgewiesen werden können, bevor die Abfrage fehlschlägt.REJECT_VALUE = reject_value 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_value: Dieses Attribut ist erforderlich, wenn Sie REJECT_TYPE = Prozentsatz angeben.REJECT_SAMPLE_VALUE = reject_sample_value 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 berechnete Prozentsatz fehlerhafter 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%. Aus diesem Grund wird PolyBase weiterhin versuchen, Daten aus der externen Datenquelle abzurufen.As a result, PolyBase will continue retrieving data from the external data source.
  • PolyBase versucht, die nächsten 100 Zeilen zu laden. Dieses Mal sind 25 Zeilen erfolgreich und 75 Zeilen fehlerhaft.PolyBase attempts to load the next 100 rows; this time 25 rows succeed and 75 rows 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.Notice 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 doesn't 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's 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.

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, beliebige externe Datenquellenobjekte zu erstellen und zu ändern. Damit ist auch der Zugriff auf alle datenbankweit gültigen Anmeldeinformationen der Datenbank möglich.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 won't 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, z.B. bei SELECT FROM EXTERNAL TABLE, in einer temporären Tabelle.In ad-hoc query scenarios, such as SELECT FROM EXTERNAL TABLE, PolyBase stores the rows that are 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, z.B. bei SELECT INTO FROM EXTERNAL TABLE, permanent in einer SQL-Tabelle.In contrast, in the import scenario, such as SELECT INTO FROM EXTERNAL TABLE, PolyBase stores the rows that are 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. Diese Aktion wird als Prädikatweitergabe bezeichnet.This action is called predicate pushdown. Um sie zu aktivieren, geben Sie die Option „Resource Manager Location“ von Hadoop in CREATE EXTERNAL DATA SOURCE an.To enable it, specify the Hadoop resource manager location option in CREATE EXTERNAL DATA SOURCE.

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

EinschränkungenLimitations and Restrictions

Da sich die Daten für eine externe Tabelle von SQL Data Warehouse kontrolliert werden, können sie jederzeit von einem externen Prozess geändert oder gelöscht werden.Since the data for an external table is under the control of SQL Data Warehouse, 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.As a result, query results against an external table aren't 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 verschoben oder entfernt werden.Similarly, a query might fail if the external data is moved or removed.

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.

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
  • 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 ausgeführt werden, die mehr als 33.000 Dateien enthalten.If the degree of concurrency is less than 32, a user can run PolyBase queries against folders in HDFS that 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:Table width limitations:

PolyBase in Azure Data Warehouse verfügt über eine Begrenzung für die Zeilenbreite von 1 MB, basierend auf der Maximalgröße einer einzelnen gültigen Zeile je Tabellendefinition.PolyBase in Azure Data Warehouse has a row width limit of 1 MB based on the maximum size of a single valid row by table definition. Wenn die Summe des Spaltenschemas größer als 1 MB ist, kann PolyBase die Daten nicht abfragen.If the sum of the column schema is greater than 1 MB, PolyBase can't query the data.

SperrenLocking

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

BeispieleExamples

A.A. 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] ;

Weitere InformationenSee Also

SQL ServerSQL Server SQL-DatenbankSQL Database SQL Data
Warehouse
SQL Data
Warehouse
** * Analytics
Platform System (PDW) *
**  
* Analytics
Platform System (PDW) *
 

 

Übersicht: AnalyseplattformsystemOverview: Analytics Platform System

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 Analytics Platform System zu importieren und speichern.Import and store data from Hadoop or Azure blob storage into Analytics Platform System.

Siehe auch CREATE EXTERNAL DATA SOURCE und DROP EXTERNAL TABLE.See also CREATE EXTERNAL DATA SOURCE and DROP EXTERNAL TABLE.

SyntaxSyntax

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_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 ] ]  
    )  
[;]  

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<reject_options> ::=  
{  
    | REJECT_TYPE = value | percentage,  
    | REJECT_VALUE = reject_value,  
    | REJECT_SAMPLE_VALUE = reject_sample_value,

}  

ArgumenteArguments

{ database_name.schema_name.table_name | schema_name.table_name | table_name } : Der ein- bis dreiteilige Name der zu erstellenden Tabelle.{ database_name.schema_name.table_name | schema_name.table_name | table_name } The one to three-part name of the table to create. Für eine externe Tabelle speichert Analytics Platform System nur die Metadaten der Tabelle mit den grundlegenden Statistiken über die Datei oder den Ordner, auf die in Hadoop oder Azure Blob Storage verwiesen wird.For an external table, Analytics Platform System stores only the table metadata along with basic statistics about the file or folder that is referenced in Hadoop or Azure blob storage. Es werden keine tatsächlichen Daten verschoben oder in Analytics Platform System gespeichert.No actual data is moved or stored in Analytics Platform System.

<Column_definition> [ ,...n ] CREATE EXTERNAL TABLE unterstützt die Möglichkeit, Spaltenname, Datentyp, NULL-Zulässigkeit und Sortierung zu konfigurieren.<column_definition> [ ,...n ] CREATE EXTERNAL TABLE supports the ability to configure column name, data type, nullability and collation. Sie können DEFAULT CONSTRAINT nicht für externe Tabellen verwenden.You can't use the DEFAULT CONSTRAINT on external tables.

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's a mismatch, the file rows will be rejected when querying the actual data.

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.LOCATION = 'folder_or_filepath' 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.The location starts from the root folder. Der Stammordner ist der in der externen Datenquelle angegebene Datenspeicherort.The root folder is the data location specified in the external data source.

In Analytics Platform System erstellt die Anweisung CREATE EXTERNAL TABLE AS SELECT den Pfad und den Ordner, wenn diese noch nicht vorhanden sind.In Analytics Platform System, the CREATE EXTERNAL TABLE AS SELECT statement creates the path and folder if it doesn't exist. CREATE EXTERNAL TABLE erstellt den Pfad und den Ordner nicht.CREATE EXTERNAL TABLE doesn't 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. PolyBase gibt wie Hadoop keine ausgeblendeten Ordner zurück.Just like Hadoop, PolyBase doesn't return hidden folders. Es werden auch keine Dateien zurückgegeben, deren Dateiname mit einem Unterstrich () oder einem Punkt (.) beginnt.It also doesn't 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 eines ausgeblendeten Ordners handelt.It won't return mydata3.txt because it's a subfolder of a hidden folder. Es werden auch keine „_hidden.txt“-Dateien zurückgegeben, da es sich um eine ausgeblendete Datei handelt.And it won't return _hidden.txt because it's 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_name: Gibt den Namen der externen Datenquelle an, die den Speicherort der externen Daten enthält.DATA_SOURCE = external_data_source_name 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.To create an external data source, use CREATE EXTERNAL DATA SOURCE.

FILE_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.FILE_FORMAT = external_file_format_name 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.To create an external file format, use CREATE EXTERNAL FILE FORMAT.

Reject-Optionen: Sie können Reject-Parameter angeben, die bestimmen, wie PolyBase modifizierte Datensätze behandelt, die aus der externen Datenquelle abgerufen werden.Reject Options 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 don't match the column definitions of the external table.

Wenn Sie die Reject-Werte nicht angeben oder ändern, verwendet PolyBase Standardwerte.When you don't 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. Die Abfrage gibt (Teil-) Ergebnisse zurück, bis der Reject-Schwellenwert überschritten wird.The query will return (partial) results until the reject threshold is exceeded. Daraufhin wird eine entsprechende Fehlermeldung ausgelöst.It then fails with the appropriate error message.

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

value: REJECT_VALUE ist ein Literalwert und kein Prozentsatz.value 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.

Die SELECT-Abfrage von PolyBase schlägt beispielsweise bei „REJECT_VALUE = 5“ und „REJECT_TYPE = value“ fehl, nachdem fünf Zeilen abgelehnt wurden.For example, if REJECT_VALUE = 5 and REJECT_TYPE = value, the PolyBase SELECT query will fail after five rows have been rejected.

percentage: REJECT_VALUE ist ein Prozentsatz und kein Literalwert.percentage 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_value: Gibt den Wert oder den Prozentsatz der Zeilen an, die zurückgewiesen werden können, bevor die Abfrage fehlschlägt.REJECT_VALUE = reject_value 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_value: Dieses Attribut ist erforderlich, wenn Sie REJECT_TYPE = Prozentsatz angeben.REJECT_SAMPLE_VALUE = reject_sample_value 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 berechnete Prozentsatz fehlerhafter 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%. Aus diesem Grund wird PolyBase weiterhin versuchen, Daten aus der externen Datenquelle abzurufen.As a result, PolyBase will continue retrieving data from the external data source.
  • PolyBase versucht, die nächsten 100 Zeilen zu laden. Dieses Mal sind 25 Zeilen erfolgreich und 75 Zeilen fehlerhaft.PolyBase attempts to load the next 100 rows; this time 25 rows succeed and 75 rows 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.Notice that matching rows have been returned before the PolyBase query detects the reject threshold has been exceeded.

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, beliebige externe Datenquellenobjekte zu erstellen und zu ändern. Damit ist auch der Zugriff auf alle datenbankweit gültigen Anmeldeinformationen der Datenbank möglich.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 won't 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, z.B. bei SELECT FROM EXTERNAL TABLE, in einer temporären Tabelle.In ad-hoc query scenarios, such as SELECT FROM EXTERNAL TABLE, PolyBase stores the rows that are 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, z.B. bei SELECT INTO FROM EXTERNAL TABLE, permanent in einer SQL-Tabelle.In contrast, in the import scenario, such as SELECT INTO FROM EXTERNAL TABLE, PolyBase stores the rows that are 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. Diese Aktion wird als Prädikatweitergabe bezeichnet.This action is called predicate pushdown. Um sie zu aktivieren, geben Sie die Option „Resource Manager Location“ von Hadoop in CREATE EXTERNAL DATA SOURCE an.To enable it, specify the Hadoop resource manager location option in CREATE EXTERNAL DATA SOURCE.

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

EinschränkungenLimitations and Restrictions

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 is off the appliance, it isn't 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.As a result, query results against an external table aren't 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 verschoben oder entfernt werden.Similarly, a query might fail if the external data is moved or removed.

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 Abfragen für verschiedene Hadoop-Datenquellen gleichzeitig ausführen, muss jede Hadoop-Datenquelle die gleiche „Hadoop Connectivity“-Serverkonfigurationseinstellung verwenden.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.For the configuration settings and supported combinations, see PolyBase Connectivity Configuration.

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
  • 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 ausgeführt werden, die mehr als 33.000 Dateien enthalten.If the degree of concurrency is less than 32, a user can run PolyBase queries against folders in HDFS that 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:Table width limitations:

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.PolyBase in SQL Server 2016 has a row width limit of 32 KB based on the maximum size of a single valid row by table definition. Wenn die Summe des Spaltenschemas größer als 32 KB ist, kann PolyBase die Daten nicht abfragen.If the sum of the column schema is greater than 32 KB, PolyBase can't 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 1 MB.

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 are 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. Verknüpfen von HDFS-Daten mit Analytics Platform System-DatenJoin HDFS data with Analytics Platform System data

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

B.B. Importieren von Zeilendaten aus HDFS in eine verteilte Analytics Platform System-TabelleImport row data from HDFS into a distributed Analytics Platform System Table

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

C.C. Importieren von Zeilendaten aus HDFS in eine replizierte Analytics Platform System-TabelleImport row data from HDFS into a replicated Analytics Platform System Table

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

Weitere InformationenSee Also