Skip to main content

CREATE EXTERNAL TABLE

The CREATE TABLE ... CONNECTION = (...) statement creates a table and specifies an S3-compatible storage bucket for data storage instead of using the default local storage.

Then the fuse table engine table will be stored in the specified S3-compatible bucket.

Benefits

  • You can determine the storage location of the table data.
  • Leverage high-performance storage like Amazon S3 Express One Zone, to improve performance.

Syntax

CREATE TABLE [IF NOT EXISTS] [db.]table_name (
<column_name> <data_type> [NOT NULL | NULL] [{ DEFAULT <expr> }],
<column_name> <data_type> [NOT NULL | NULL] [{ DEFAULT <expr> }],
...
)
's3://<bucket>/[<path>]'
CONNECTION = (
ENDPOINT_URL = 'https://<endpoint-URL>'
ACCESS_KEY_ID = '<your-access-key-ID>'
SECRET_ACCESS_KEY = '<your-secret-access-key>'
REGION = '<region-name>'
ENABLE_VIRTUAL_HOST_STYLE = 'true' | 'false'
)
|
CONNECTION = (
CONNECTION_NAME = '<your-connection-name>'
);

Connection parameters:

ParameterDescriptionRequired
s3://<bucket>/[<path>]Files are in the specified external location (S3-like bucket)YES
ENDPOINT_URLThe bucket endpoint URL starting with "https://". To use a URL starting with "http://", set allow_insecure to true in the [storage] block of the file databend-query-node.toml.Optional
ACCESS_KEY_IDYour access key ID for connecting the AWS S3 compatible object storage. If not provided, Databend will access the bucket anonymously.Optional
SECRET_ACCESS_KEYYour secret access key for connecting the AWS S3 compatible object storage.Optional
REGIONAWS region name. For example, us-east-1.Optional
ENABLE_VIRTUAL_HOST_STYLEIf you use virtual hosting to address the bucket, set it to "true".Optional

For more information on CONNECTION_NAME, see CREATE CONNECTION

S3-compatible Bucket Policy Requirements

The external location S3 bucket must have the following permissions granted through an S3 bucket policy:

Read-only Access:

  • s3:GetObject: Allows reading objects from the bucket.
  • s3:ListBucket: Allows listing objects in the bucket.
  • s3:ListBucketVersions: Allows listing object versions in the bucket.
  • s3:GetObjectVersion: Allows retrieving a specific version of an object.

Writable Access:

  • s3:PutObject: Allows writing objects to the bucket.
  • s3:DeleteObject: Allows deleting objects from the bucket.
  • s3:AbortMultipartUpload: Allows aborting multipart uploads.
  • s3:DeleteObjectVersion: Allows deleting a specific version of an object. :::

Examples

info

Before using the SHOW CREATE TABLE command, you need to set the hide_options_in_show_create_table variable to 0.

SET GLOBAL hide_options_in_show_create_table = 0;

Create a Table with External Location

Create a table with data stored on an external location, such as Amazon S3:

-- Create a table named `mytable` and specify the location `s3://testbucket/admin/data/` for the data storage
CREATE TABLE mytable (
a INT
)
's3://testbucket/admin/data/'
CONNECTION = (
ACCESS_KEY_ID = '<your_aws_key_id>',
SECRET_ACCESS_KEY = '<your_aws_secret_key>',
ENDPOINT_URL = 'https://s3.amazonaws.com'
);

-- Show the table schema
SHOW CREATE TABLE mytable;

CREATE TABLE mytable (
a INT NULL
)
ENGINE = FUSE
COMPRESSION = 'zstd'
STORAGE_FORMAT = 'parquet'
LOCATION = 's3 | bucket=testbucket,root=/admin/data/,endpoint=https://s3.amazonaws.com';

Create a Table Using a Connection

Or you can create a connection and use it to create a table:

-- Create a connection named `s3_connection` for the S3 credentials
CREATE CONNECTION s3_connection
STORAGE_TYPE = 's3'
SECRET_ACCESS_KEY = '<your-secret-access-key>'
ACCESS_KEY_ID = '<your-access-key-id>';

CREATE TABLE mytable (
a INT
)
's3://testbucket/admin/data/'
CONNECTION = (
CONNECTION_NAME = 's3_connection'
);

-- Show the table schema
SHOW CREATE TABLE mytable;

CREATE TABLE mytable (
a INT NULL
)
ENGINE = FUSE
COMPRESSION = 'zstd'
STORAGE_FORMAT = 'parquet'
LOCATION = 's3 | bucket=testbucket,root=/admin/data/,endpoint=https://s3.amazonaws.com';