In Vertica we can make use of external tables by using CREATE EXTERNAL TABLE AS COPY syntax.
there is no ROS or WOS concepts when working with External Tables.
External tables are useful and is a very flexible mechanism to feed data to our systems.
CREATE EXTERNAL TABLE Table_Name (col1 data type)
AS COPY FROM '/full path to the data file'
DELIMITER ',';
Examples of create External Tables in Vertica
create external table ext(
id int,
name1 varchar(20),
name2 varchar(20),
email varchar(40),
country varchar(30),
ip varchar(15)
) as copy from '/tmp/data/xaa' delimiter ',';
create external table ext(
id int,
name1 varchar(20),
name2 varchar(20),
email varchar(40),
country varchar(30),
ip varchar(15)
) as copy from '/tmp/data/*' delimiter ',';
create external table ext(
id int,
name1 varchar(20),
name2 varchar(20),
email varchar(40),
country varchar(30),
ip varchar(15)
) as copy from '/tmp/data/xaa.bz2' BZIP delimiter ',';
(dbadmin@:5433) [dbadmin] insert into ext values(1111,'Lisa',
'Wheeler','[email protected]','Indonesia','127.42.139.76');
ERROR 5263: Unsupported access to external table
(dbadmin@:5433) [dbadmin] * update ext set id=id+1 where id=1;
ERROR 5263: Unsupported access to external table
(dbadmin@:5433) [dbadmin] * delete from ext where id=1;
ERROR 5263: Unsupported access to external table
(dbadmin@:5433) [dbadmin] * CREATE TEXT INDEX text_index ON ext (id, email);
ERROR 6170: Cannot index external table 'ext'
HINT: In addition to supporting text indexing, native Vertica tables have
much better unindexed query performance
(dbadmin@:5433) [dbadmin] * alter table ext ADD PRIMARY KEY(id);
WARNING 2623: Column "id" definition changed to NOT NULL
ALTER TABLE
(dbadmin@:5433) [dbadmin] * select e.id,t.name1 from ext e
join tbl1 t
on e.id=t.id limit 1;
id | name1
-----+-------
500 | Jose
MERGE /*+ direct */
INTO tbl1 --target
USING ext --source
ON tbl1.id = ext.id
WHEN MATCHED THEN
UPDATE
SET id = ext.id,
name1 = ext.name1,
name2 = ext.name2,
email = ext.email,
country = ext.country,
ip = ext.ip
WHEN NOT MATCHED THEN
INSERT
(id, name1, name2, email, country, ip)
VALUES
(ext.id, ext.name1, ext.name2, ext.email, ext.country, ext.ip);
(dbadmin@:5433) [dbadmin] * create view view_ext as select * from ext limit 1;
CREATE VIEW
(dbadmin@:5433) [dbadmin] select * from view_ext ;
id | name1 | name2 | email | country | ip
-----+---------+---------+------------------------+---------+-----------------
499 | William | Simmons | wsimmonsdu@nytimes.com | Sweden | 192.188.175.171
(1 row)
(dbadmin@:5433) [dbadmin] * alter table ext rename to ext1;
ALTER TABLE
(dbadmin@:5433) [dbadmin] create external table ext1(id int
,name1 varchar(20),name2 varchar(20),email varchar(40),country varchar(30),ip varchar(15))
as copy from '/tmp/data/xaa' delimiter ',' ABORT ON ERROR;
CREATE TABLE
(dbadmin@:5433) [dbadmin] select * from ext1;
ERROR 2886: Could not open file [/tmp/data/xaa] for reading; No such file or directory
HINT: Make sure the file is available on the specified node. If using ON ANY NODE, it must
be available at this path on all nodes in the cluster since any node could load the file
(dbadmin@:5433) [dbadmin] * d ext1;
List of Fields by Tables
Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key
--------+-------+---------+-------------+------+---------+----------+-------------+-------------
public | ext1 | id | int | 8 | | f | f |
public | ext1 | name1 | varchar(20) | 20 | | f | f |
public | ext1 | name2 | varchar(20) | 20 | | f | f |
public | ext1 | email | varchar(40) | 40 | | f | f |
public | ext1 | country | varchar(30) | 30 | | f | f |
public | ext1 | ip | varchar(15) | 15 | | f | f |
(6 rows)