CREATE FOREIGN TABLE
Note
Starting with SQream DB v2020.2, external tables have been renamed to foreign tables, and use a more flexible foreign data wrapper concept.
Upgrading to a new version of SQream DB converts existing external tables automatically.
CREATE FOREIGN TABLE creates a new foreign table in an existing database.
See more in the Foreign tables guide.
Tip
- Data in a foreign table can change if the sources change, and frequent access to remote files may harm performance. 
- To create a regular table, see CREATE TABLE 
Permissions
The role must have the CREATE permission at the database level.
Syntax
create_table_statement ::=
    CREATE [ OR REPLACE ] FOREIGN TABLE [schema_name].table_name (
        { column_def [, ...] }
    )
    [ FOREIGN DATA ] WRAPPER fdw_name
    [ OPTIONS ( option_def [, ...  ] ) ]
    ;
schema_name ::= identifier
table_name ::= identifier
fdw_name ::=
    { csv_fdw | orc_fdw | parquet_fdw }
option_def ::=
{
   LOCATION = '{ path_spec }'
   | DELIMITER = '{ field_delimiter }' -- for CSV only
   | RECORD_DELIMITER = '{ record_delimiter }' -- for CSV only
   | AWS_ID '{ AWS ID }'
   | AWS_SECRET '{ AWS SECRET }'
}
path_spec ::= { local filepath | S3 URI | HDFS URI }
field_delimiter ::= delimiter_character
record_delimiter ::= delimiter_character
column_def ::=
    { column_name type_name [ default ] [ column_constraint ] }
column_name ::= identifier
column_constraint ::=
    { NOT NULL | NULL }
default ::=
    DEFAULT default_value
    | IDENTITY [ ( start_with [ , increment_by ] ) ]
Parameters
| Parameter | Description | 
|---|---|
| 
 | Create a new table, and overwrite any existing table by the same name. Does not return an error if the table already exists.  | 
| 
 | The name of the schema in which to create the table. | 
| 
 | The name of the table to create, which must be unique inside the schema. | 
| 
 | A comma separated list of column definitions. A minimal column definition includes a name identifier and a datatype. Other column constraints and default values can be added optionally. | 
| 
 | Specifies the format of the source files, such as  | 
| 
 | Specifies a path or URI of the source files, such as  | 
| 
 | Specifies the field delimiter for CSV files. Defaults to  | 
| 
 | Specifies the record delimiter for CSV files. Defaults to a newline,  | 
| 
 | Credentials for authenticated S3 access | 
Examples
A simple table from Tab-delimited file (TSV)
CREATE OR REPLACE FOREIGN TABLE cool_animals
  (id INT NOT NULL, name text(30) NOT NULL, weight FLOAT NOT NULL)
WRAPPER csv_fdw
OPTIONS
  ( LOCATION = '/home/rhendricks/cool_animals.csv',
    DELIMITER = '\t'
  )
 ;
A table from a directory of Parquet files on HDFS
CREATE FOREIGN TABLE users
  (id INT NOT NULL, name text(30) NOT NULL, email text(50) NOT NULL)
WRAPPER parquet_fdw
OPTIONS
  (
    LOCATION =  'hdfs://hadoop-nn.piedpiper.com/rhendricks/users/*.parquet'
  );
A table from a bucket of ORC files on S3
CREATE FOREIGN TABLE users
  (id INT NOT NULL, name text(30) NOT NULL, email text(50) NOT NULL)
WRAPPER orc_fdw
OPTIONS
  (
      LOCATION = 's3://pp-secret-bucket/users/*.orc',
      AWS_ID = 'our_aws_id',
      AWS_SECRET = 'our_aws_secret'
   );
Changing a foreign table to a regular table
Materializes a foreign table into a regular table.
CREATE TABLE real_table
 AS SELECT * FROM some_foreign_table;