Externe Tabellen mit Partitionierung der Quelldatei
In Autonomous Database können Sie partitionierte externe Tabellen aus partitionierten Daten im Hive-Stil oder aus einfachen, in Ordner partitionierten Daten erstellen, die in Ihrem Cloud-Objektspeicher gespeichert sind.
Bei der Partitionierung von Quelldateien werden bei bestimmten Dateimustern anstelle einer vollständigen Partitionsspezifikation Partitionierungsinformationen aus dem Dateipfad abgeleitet. Betrachten Sie beispielsweise die folgenden Datendateispezifikationen:
-
Hive-Stil: Beispiel:
sales/country=USA/year=2020/month=01/file1.csv
-
Einfacher Ordnerpartitionierungsstil: Beispiel:
sales/USA/2020/01/file1.parquet
Die Verwendung eines dieser gängigen Partitionierungsformate vereinfacht die Erstellung und Verwaltung partitionierter externer Tabellen erheblich. Auch wenn Partitionsspalten möglicherweise nicht in der Datendatei angezeigt werden, können sie dennoch mit SQL abgefragt werden. Durch die Partitionierung von Daten wird auch die Abfrageperformance verbessert, indem die gescannte Datenmenge drastisch reduziert wird. Wenn Sie in diesem Beispiel "USA"-Daten abfragen, kann die Abfrage das Scannen der Dateien für andere Länder überspringen.
Partitionierte Daten im Cloud-Objektspeicher im Hive-Format
Hive bietet ein Standard-Metadatenformat für Big-Data-Verarbeitungs-Engines. Partitionierte Daten im Cloud-Objektspeicher, die im Hive-Format generiert werden, werden im folder/subfolder
-Format dargestellt. Beispiel: Im Cloud-Objektspeicher wird eine Datendatei im Hive-Format wie folgt gespeichert:
table/partition1=partition1_value/partition2=partition2_value/data_file.csv
Dateien, die im partitionierten Hive-Format gespeichert sind, stellen Partitionsinformationen im Namen des Datendateipfads bereit. Der Datendateipfadname enthält Informationen über den Objektinhalt, einschließlich Partitionsspaltennamen und Partitionsspaltenwerten (die Datendatei enthält nicht die Partitionsspalten und die zugehörigen Werte).
Beispiel: Eine externe partitionierte Tabelle SALES
, die aus Daten im Hive-Format im Cloud-Objektspeicher erstellt wurde:
.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv
Die Partitionsinformationen im Hive-Format zeigen, dass die Datendateien im Cloud-Objektspeicher nach country
, year
und month
partitioniert sind und die Werte für diese Partitionsspalten auch innerhalb des Pfadnamens im Hive-Format für jede Datendatei angegeben werden (der Pfadname enthält Werte für die partitionierten Spalten: country
, year
und month
).
Die Spaltennamen im Pfad werden von der API verwendet, um die Tabellendefinition zu vereinfachen.
Partitionierte Daten im Cloud-Objektspeicher im einfachen Ordnerformat
Partitionierte Daten im Cloud-Objektspeicher, die im Ordnerformat generiert werden, werden in einem folder/subfolder
-Format dargestellt, ähnlich wie partitionierte Daten im Hive-Format. Die Informationen im Pfad zeigen jedoch die Spaltenwerte an und enthalten keine Spaltennamen. Außerdem ist bei partitionierten Daten im Ordnerformat die im Objektnamen angegebene Partitionsreihenfolge signifikant und muss mit der Reihenfolge in den Tabellenspalten übereinstimmen.
Beispiel: Im Cloud-Objektspeicher wird eine Datendatei im Ordnerformat wie folgt gespeichert:
table/partition1_value/partition2_value/*.parquet
Der Pfad enthält sowohl Partitionsspaltenwerte in der Reihenfolge der Partitionsspalten als auch die Datendateien. Mit Autonomous Database können Sie eine externe partitionierte Tabelle aus Daten im Ordnerformat erstellen. Außerdem können Sie eine Abfrage mit den angegebenen Partitionen ausführen.
Dateien, die im Partitionierungsformat des Ordners gespeichert sind, geben die Spaltenwerte der Datenpartition im Dateinamen an. Im Gegensatz zu Hive enthalten die Pfade nicht den Spaltennamen, daher müssen die Spaltennamen angegeben werden. Die Reihenfolge der Partitionsspalten ist wichtig, und die Reihenfolge im Dateinamen für Spaltenpartitionsnamen muss mit der Reihenfolge im Parameter partition_columns
übereinstimmen.
Informationen zum Abfragen partitionierter Daten im Cloud-Objektspeicher
Wenn Sie externe partitionierte Daten im Hive-Format abfragen, versteht und verwendet die Abfrage-Engine die Partitionierungsinformationen aus dem Dateipfadnamen. Beispiel: Eine externe partitionierte Tabelle SALES
, in der die Quelldatei sales/country=USA/year=2020/month=02/file3.csv
im Objektspeicher die folgenden Umsatzdaten enthält:
tents, 291
canoes, 22
backpacks, 378
Die country
-Werte im Pfadnamen und die Zeitperiodenwerte für month
und year
werden nicht als Spalten in der Datendatei angegeben. Die Werte der Partitionsspalte werden nur im Pfadnamen mit den angezeigten Werten angegeben: USA, 2020 und 02. Nachdem Sie eine externe partitionierte Tabelle mit dieser Datendatei erstellt haben, können Sie die Partitionsspalten und deren Werte verwenden, wenn Sie eine Abfrage für die externe partitionierte Tabelle ausführen.
Beispiel:
SELECT year, month, product, units
FROM SALES WHERE year='2020' AND month='02' AND country='USA'
Der Vorteil der Erstellung einer externen partitionierten Tabelle mit Daten, die als partitionierte Daten im Hive-Format generiert werden, besteht darin, dass die Abfrage-Engine optimiert ist, um die Daten zu partitionieren und die richtige Partition auszuwählen. Die Abfrage wählt nur Daten aus einer Partition aus und muss nur eine einzelne Datendatei durchsuchen. Daher erfordert die Abfrage nur einen Scan der Datei file3.csv
(/sales/country=USA/year=2020/month=02/file3.csv
). Bei großen Datenmengen kann ein solches Partitions-Pruning erhebliche Leistungsverbesserungen bewirken.
Wenn externe Standardtabellen von Oracle Database verwendet werden, muss die Partitionsspalte als Spalte in der Datendatei verfügbar sein, damit sie für Abfragen oder Partitionsdefinitionen verwendet werden kann. Ohne die besondere Behandlung, die mit externen partitionierten Tabellen in Autonomous Database verfügbar ist, wäre dies ein Problem, wenn Sie Daten verwenden möchten, die im Hive-Format im Cloud Object Store gespeichert sind, da Sie die Datendateien neu generieren müssen, um die Partition als Spalte in die Datendatei aufzunehmen.
Partitionierte externe Tabellen erstellen
Wenn Sie unstrukturierte Daten verwenden, die im Hive-Format im Cloud-Objektspeicher gespeichert sind, und eine externe partitionierte Tabelle erstellen, können die Spalten und ihre Typen nicht aus der Quelldatei abgeleitet werden. Daher müssen die Spalten und ihre Datentypen mit dem Parameter column_list
angegeben werden. Um die partitionierten externen Tabellen zu erstellen, geben Sie die Partitionsspalten und deren Typen wie folgt mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
an:
-
Die Root für die Dateiliste wird im Pfadnamen mit dem Parameter
file_uri_list
angegeben. Beispiel:http://.../sales/*
-
Die Spaltennamen und Datentypen werden mit dem Parameter
column_list
angegeben. -
Die Option
partition_columns
im Parameterformat
gibt die Partitionsspalten an. -
Die generierte DLL enthält die im Pfadnamen angegebenen Spalten.
In diesem Beispiel werden beim Erstellen der externen Tabelle die Spalten country
, year
und month
im Parameter column_list
hinzugefügt. Die externe Tabelle wird mit den Spalten country
, year
und month
erstellt, die nicht in den Datendateien enthalten sind, und Listenpartitionen werden erstellt, um das Partitions-Pruning zu aktivieren.
Wenn Sie strukturierte Daten wie Parquet-, Avro- oder ORC-Dateien verwenden, die im Ordnerformat im Cloud-Objektspeicher gespeichert sind, sind die Spalten und ihre Datentypen bekannt. Sie müssen die Spaltenliste nicht wie bei unstrukturierten Daten erforderlich angeben. Um die partitionierten externen Tabellen zu erstellen, geben Sie die Partitionsspalten und deren Typen wie folgt mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
an:
- Die Root für die Dateiliste wird im Pfadnamen mit dem Parameter
file_uri_list
angegeben. Beispiel:http://.../sales/*
- Der Parameter
column_list
ist für strukturierte Dateien nicht erforderlich. Wenn Sie die Spaltenliste nicht angeben, müssen Sie beim Erstellen der externen partitionierten Tabelle die Partitionsspalten und deren Datentypen definieren. Verwenden Sie die Optionpartition_columns
im Parameterformat
, um die Partitionsspalten und ihre Datentypen anzugeben. - Die generierte DLL enthält die im Pfadnamen angegebenen Spalten.
Vollständige Beispiele finden Sie unter Externe partitionierte Daten mit Quelldatei-Organisation im Hive-Format abfragen und Externe partitionierte Daten mit Quelldatei-Organisation im Ordnerformat abfragen.
- Externe Partitionierung: CSV-Quelldateien mit Ordnern im Hive-Stil
Zeigt, wie Sie externe partitionierte Tabellen mit CSV-Quelldateien erstellen, die im Cloud Object Store in Hive-Ordnern gespeichert sind. - Externe Partitionierung: CSV-Quelldateien mit einfachen Ordnern
Zeigt, wie Sie externe partitionierte Tabellen mit CSV-Quelldateien erstellen, die im Cloud Object Store im einfachen Ordnerformat gespeichert sind. - Externe Partitionierung: Parquet-Quelldateien mit Ordnern im Hive-Stil
Zeigt, wie externe partitionierte Tabellen mit Parquet-Quelldateien erstellt werden, die im Cloud Object Store in Ordnern im Hive-Stil gespeichert sind. - Externe Partitionierung: Parquet mit einfachen Ordnern
Zeigt, wie Sie externe partitionierte Tabellen mit Parquet-Quelldateien erstellen, die im Cloud-Objektspeicher im einfachen Ordnerformat gespeichert sind.
Übergeordnetes Thema: Externe Tabellen mit in Quelldateien angegebener Partitionierung abfragen
Externe Partitionierung: CSV-Quelldateien mit Ordnern im Hive-Stil
Zeigt, wie externe partitionierte Tabellen mit CSV-Quelldateien erstellt werden, die im Cloud Object Store in Hive-Ordnern gespeichert sind.
Liste der Quelldateien:
.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv
API:
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
(
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv',
column_list => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)',
field_list => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
format => '{"type":"csv","partition_columns":["country", "year", "month"]}');
Die
partition_columns
im Parameter format
muss mit den Spaltennamen im Pfad übereinstimmen (Beispiel: Die Spalte country
entspricht "country=…
").
Übergeordnetes Thema: Externe Tabellen mit Partitionierung der Quelldatei
Externe Partitionierung: CSV-Quelldateien mit einfachen Ordnern
Zeigt, wie Sie externe partitionierte Tabellen mit CSV-Quelldateien erstellen, die im Cloud-Objektspeicher im einfachen Ordnerformat gespeichert sind.
Liste der Quelldateien:
.../sales/USA/2020/01/file1.csv
.../sales/USA/2020/01/file2.csv
.../sales/USA/2020/02/file3.csv
.../sales/USA/2020/03/file1.csv
.../sales/FRA/2020/03/file1.csv
API:
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
(
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv',
column_list => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)',
field_list => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
format => '{"type":"csv","partition_columns":["country", "year", "month"]}');
Der API-Aufruf ist mit dem im vorherigen Beispiel identisch, aber die Reihenfolge der
partition_columns
im Parameter format
ist wichtig, da sich der Spaltenname nicht im Dateipfad befindet.
Übergeordnetes Thema: Externe Tabellen mit Partitionierung der Quelldatei
Externe Partitionierung: Parquet-Quelldateien mit Ordnern im Hive-Stil
Zeigt, wie Sie externe partitionierte Tabellen mit Parquet-Quelldateien erstellen, die im Cloud Object Store in Hive-Ordnern gespeichert sind.
Liste der Quelldateien:
.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet
API:
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
(
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.parquet',
format =>
json_object( 'type' value 'parquet',
'schema' value 'first',
'partition_columns' value
json_array(
json_object('name' value 'country', 'type' value 'varchar2(100)'),
json_object('name' value 'year', 'type' value 'number'),
json_object('name' value 'month', 'type' value 'varchar2(2)')
)
)
);
Der Parameter
column_list
ist nicht angegeben. Wie gezeigt, geben Sie für jede Partitionsspalte sowohl den Namen als auch den Datentyp im Parameter format
partition_columns
an.
Übergeordnetes Thema: Externe Tabellen mit Partitionierung der Quelldatei
Externe Partitionierung: Parquet mit einfachen Ordnern
Zeigt, wie Sie externe partitionierte Tabellen mit Parquet-Quelldateien erstellen, die im Cloud-Objektspeicher im einfachen Ordnerformat gespeichert sind.
Liste der Quelldateien:
.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet
API:
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.parquet',
format =>
json_object( 'type' value 'parquet',
'schema' value 'first',
'partition_columns' value
json_array(
json_object('name' value 'country', 'type' value 'varchar2(100)'),
json_object('name' value 'year', 'type' value 'number'),
json_object('name' value 'month', 'type' value 'varchar2(2)')
)
)
);
Der Parameter
column_list
ist nicht angegeben. Sie müssen sowohl den Namen als auch den Datentyp für die Partitionsspalten angeben. Außerdem ist die Reihenfolge der partition_columns
in der Formatklausel wichtig, da sich der Spaltenname nicht im Dateipfad befindet.
Übergeordnetes Thema: Externe Tabellen mit Partitionierung der Quelldatei