-
Notifications
You must be signed in to change notification settings - Fork 221
Add Iceberg lake-table DDL: CREATE ICEBERG TABLE, FOREIGN CATALOG, FOREIGN VOLUME (kernel scaffolding) #1842
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
MisterRaindrop
wants to merge
18
commits into
apache:main
Choose a base branch
from
MisterRaindrop:feature/iceberg-ddl-kernel
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
a8e5f53
catalog: add pg_foreign_catalog, pg_foreign_volume, pg_lake_table
MisterRaindrop c2bb7c0
nodes: add parse nodes for Iceberg lake-table DDL
MisterRaindrop b028fb8
parser: add grammar for CREATE ICEBERG TABLE / FOREIGN CATALOG / VOLUME
MisterRaindrop 5a679b2
commands: implement CREATE/DROP FOREIGN CATALOG and FOREIGN VOLUME
MisterRaindrop b4704be
commands: implement CREATE ICEBERG TABLE
MisterRaindrop a81bd6b
bin: pg_dump skip and psql tab completion for lake-table DDL
MisterRaindrop 73172e8
tests: add lake_table regression test, refresh catalog expecteds
MisterRaindrop 5be5f9f
Use ASF license header for new lake-table source files
MisterRaindrop 272d910
Move ASF license header to top of file header block
MisterRaindrop c70fbf9
foreigncmds: flatten IF NOT EXISTS duplicate handling
MisterRaindrop 5105d02
parser/commands: unify lake-table DROP syntax with CREATE
MisterRaindrop f21763c
commands: make foreign catalog type a required first-class column
MisterRaindrop 7e6e7ca
Update src/backend/foreign/foreign.c
MisterRaindrop 70b451a
Update src/include/commands/laketablecmds.h
MisterRaindrop 32bda14
psql: complete only iceberg tables for DROP ICEBERG TABLE
MisterRaindrop f6d3286
commands: finish ValidateLakeTableOptions -> ValidateLakeTableStmt re…
MisterRaindrop afe4142
commands: reject plain DROP TABLE on an iceberg table
MisterRaindrop 9e4e0c2
doc: add reference pages for the iceberg lake-table DDL commands
MisterRaindrop File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,144 @@ | ||
| <!-- | ||
| doc/src/sgml/ref/create_foreign_catalog.sgml | ||
| PostgreSQL documentation | ||
| --> | ||
|
|
||
| <refentry id="sql-createforeigncatalog"> | ||
| <indexterm zone="sql-createforeigncatalog"> | ||
| <primary>CREATE FOREIGN CATALOG</primary> | ||
| </indexterm> | ||
|
|
||
| <refmeta> | ||
| <refentrytitle>CREATE FOREIGN CATALOG</refentrytitle> | ||
| <manvolnum>7</manvolnum> | ||
| <refmiscinfo>SQL - Language Statements</refmiscinfo> | ||
| </refmeta> | ||
|
|
||
| <refnamediv> | ||
| <refname>CREATE FOREIGN CATALOG</refname> | ||
| <refpurpose>define a new foreign catalog</refpurpose> | ||
| </refnamediv> | ||
|
|
||
| <refsynopsisdiv> | ||
| <synopsis> | ||
| CREATE FOREIGN CATALOG [ IF NOT EXISTS ] <replaceable class="parameter">catalog_name</replaceable> | ||
| SERVER <replaceable class="parameter">server_name</replaceable> | ||
| TYPE '<replaceable class="parameter">catalog_type</replaceable>' | ||
| [ OPTIONS ( <replaceable class="parameter">option</replaceable> '<replaceable class="parameter">value</replaceable>' [, ...] ) ] | ||
| </synopsis> | ||
| </refsynopsisdiv> | ||
|
|
||
| <refsect1 id="sql-createforeigncatalog-description"> | ||
| <title>Description</title> | ||
|
|
||
| <para> | ||
| <command>CREATE FOREIGN CATALOG</command> defines a new foreign catalog. | ||
| Foreign catalog names are global within a database. The user who creates | ||
| the catalog becomes its owner. | ||
| </para> | ||
|
|
||
| <para> | ||
| Creating a foreign catalog requires <literal>USAGE</literal> privilege on | ||
| the referenced foreign server. | ||
| </para> | ||
|
|
||
| <para> | ||
| The required catalog type is stored verbatim. Provider-specific validation | ||
| of the catalog type and options is outside the kernel, and generic options | ||
| currently have no kernel validator. | ||
| </para> | ||
| </refsect1> | ||
|
|
||
| <refsect1> | ||
| <title>Parameters</title> | ||
|
|
||
| <variablelist> | ||
| <varlistentry> | ||
| <term><literal>IF NOT EXISTS</literal></term> | ||
| <listitem> | ||
| <para> | ||
| Do not throw an error if a foreign catalog with the same name already | ||
| exists. A notice is issued in this case. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">catalog_name</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The database-global name of the foreign catalog to be created. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">server_name</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The name of an existing foreign server for the catalog. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">catalog_type</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The required provider-specific catalog type. The value is stored | ||
| verbatim. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">option</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The name of a provider-specific option for the catalog. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">value</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The value of a provider-specific catalog option. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
| </variablelist> | ||
| </refsect1> | ||
|
|
||
| <refsect1 id="sql-createforeigncatalog-examples"> | ||
| <title>Examples</title> | ||
|
|
||
| <para> | ||
| Create a Hive catalog that uses the foreign server | ||
| <literal>hive_srv</literal>: | ||
| <programlisting> | ||
| CREATE FOREIGN CATALOG hive_cat SERVER hive_srv TYPE 'hive' OPTIONS (uri 'thrift://localhost:9083'); | ||
| </programlisting></para> | ||
| </refsect1> | ||
|
|
||
| <refsect1 id="sql-createforeigncatalog-compatibility"> | ||
| <title>Compatibility</title> | ||
|
|
||
| <para> | ||
| <command>CREATE FOREIGN CATALOG</command> is an | ||
| <productname>Apache Cloudberry</productname> extension and is not defined in | ||
| the <acronym>SQL</acronym> standard. | ||
| </para> | ||
| </refsect1> | ||
|
|
||
| <refsect1> | ||
| <title>See Also</title> | ||
|
|
||
| <simplelist type="inline"> | ||
| <member><xref linkend="sql-dropforeigncatalog"/></member> | ||
| <member><xref linkend="sql-createicebergtable"/></member> | ||
| <member><xref linkend="sql-createserver"/></member> | ||
| </simplelist> | ||
| </refsect1> | ||
| </refentry> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,133 @@ | ||
| <!-- | ||
| doc/src/sgml/ref/create_foreign_volume.sgml | ||
| PostgreSQL documentation | ||
| --> | ||
|
|
||
| <refentry id="sql-createforeignvolume"> | ||
| <indexterm zone="sql-createforeignvolume"> | ||
| <primary>CREATE FOREIGN VOLUME</primary> | ||
| </indexterm> | ||
|
|
||
| <refmeta> | ||
| <refentrytitle>CREATE FOREIGN VOLUME</refentrytitle> | ||
| <manvolnum>7</manvolnum> | ||
| <refmiscinfo>SQL - Language Statements</refmiscinfo> | ||
| </refmeta> | ||
|
|
||
| <refnamediv> | ||
| <refname>CREATE FOREIGN VOLUME</refname> | ||
| <refpurpose>define a new foreign volume</refpurpose> | ||
| </refnamediv> | ||
|
|
||
| <refsynopsisdiv> | ||
| <synopsis> | ||
| CREATE FOREIGN VOLUME [ IF NOT EXISTS ] <replaceable class="parameter">volume_name</replaceable> | ||
| SERVER <replaceable class="parameter">server_name</replaceable> | ||
| [ OPTIONS ( <replaceable class="parameter">option</replaceable> '<replaceable class="parameter">value</replaceable>' [, ...] ) ] | ||
| </synopsis> | ||
| </refsynopsisdiv> | ||
|
|
||
| <refsect1 id="sql-createforeignvolume-description"> | ||
| <title>Description</title> | ||
|
|
||
| <para> | ||
| <command>CREATE FOREIGN VOLUME</command> defines a new foreign volume. | ||
| Foreign volume names are global within a database. The user who creates | ||
| the volume becomes its owner. | ||
| </para> | ||
|
|
||
| <para> | ||
| Creating a foreign volume requires <literal>USAGE</literal> privilege on | ||
| the referenced foreign server. | ||
| </para> | ||
|
|
||
| <para> | ||
| Volume options are provider-specific. Provider-specific option validation | ||
| is outside the kernel, and generic options currently have no kernel | ||
| validator. | ||
| </para> | ||
| </refsect1> | ||
|
|
||
| <refsect1> | ||
| <title>Parameters</title> | ||
|
|
||
| <variablelist> | ||
| <varlistentry> | ||
| <term><literal>IF NOT EXISTS</literal></term> | ||
| <listitem> | ||
| <para> | ||
| Do not throw an error if a foreign volume with the same name already | ||
| exists. A notice is issued in this case. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">volume_name</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The database-global name of the foreign volume to be created. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">server_name</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The name of an existing foreign server for the volume. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">option</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The name of a provider-specific option for the volume. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
|
|
||
| <varlistentry> | ||
| <term><replaceable class="parameter">value</replaceable></term> | ||
| <listitem> | ||
| <para> | ||
| The value of a provider-specific volume option. | ||
| </para> | ||
| </listitem> | ||
| </varlistentry> | ||
| </variablelist> | ||
| </refsect1> | ||
|
|
||
| <refsect1 id="sql-createforeignvolume-examples"> | ||
| <title>Examples</title> | ||
|
|
||
| <para> | ||
| Create a volume for an object storage prefix using the foreign server | ||
| <literal>s3_srv</literal>: | ||
| <programlisting> | ||
| CREATE FOREIGN VOLUME s3_vol SERVER s3_srv OPTIONS (path 's3://bucket/prefix'); | ||
| </programlisting></para> | ||
| </refsect1> | ||
|
|
||
| <refsect1 id="sql-createforeignvolume-compatibility"> | ||
| <title>Compatibility</title> | ||
|
|
||
| <para> | ||
| <command>CREATE FOREIGN VOLUME</command> is an | ||
| <productname>Apache Cloudberry</productname> extension and is not defined in | ||
| the <acronym>SQL</acronym> standard. | ||
| </para> | ||
| </refsect1> | ||
|
|
||
| <refsect1> | ||
| <title>See Also</title> | ||
|
|
||
| <simplelist type="inline"> | ||
| <member><xref linkend="sql-dropforeignvolume"/></member> | ||
| <member><xref linkend="sql-createicebergtable"/></member> | ||
| <member><xref linkend="sql-createserver"/></member> | ||
| </simplelist> | ||
| </refsect1> | ||
| </refentry> |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.