0% found this document useful (0 votes)
39 views

Lab20 ExternalTables

Uploaded by

vr.sf99
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views

Lab20 ExternalTables

Uploaded by

vr.sf99
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

================

External Tables
================
USE DATABASE MYOWN_DB;

// Create a schema for Stage objects


CREATE SCHEMA IF NOT EXISTS EXT_STAGES;

// Create a schema for File format objects


CREATE SCHEMA IF NOT EXISTS FILE_FORMATS;

// Create a schema for External Tables


CREATE SCHEMA IF NOT EXISTS EXT_TABLES;

----------------------------

// Create file format object


CREATE OR REPLACE FILE FORMAT MYOWN_DB.FILE_FORMATS.CSV_FILEFORMAT
type = csv
field_delimiter = '|'
skip_header = 1
empty_field_as_null = TRUE;

// Create stage object with integration object & file format object
// Using the Storeage Integration object that was already created

CREATE OR REPLACE STAGE MYOWN_DB.EXT_STAGES.MYS3_STAGE


URL = 's3://awss3bucketjana/csv/'
STORAGE_INTEGRATION = s3_int
FILE_FORMAT = MYOWN_DB.FILE_FORMATS.CSV_FILEFORMAT ;

//Listing files under my s3 bucket


LIST @MYOWN_DB.EXT_STAGES.MYS3_STAGE;

--------------------------

//Create External Tables

CREATE OR REPLACE EXTERNAL TABLE EXT_TABLES.ET_S3_CUSTOMER(


CUST_ID NUMBER AS (value:c1::NUMBER),
CUSTNAME VARCHAR AS (value:c2::VARCHAR),
EMAIL VARCHAR AS (value:c3::VARCHAR),
CITY VARCHAR AS (value:c4::VARCHAR),
STATE VARCHAR AS (value:c5::VARCHAR),
DOB DATE AS TO_DATE(value:c6::VARCHAR,'YYYY-MM-DD')
)
WITH
LOCATION = @MYOWN_DB.EXT_STAGES.MYS3_STAGE
PATTERN = '.*customer.*'
FILE_FORMAT = MYOWN_DB.FILE_FORMATS.CSV_FILEFORMAT
;

SELECT * FROM EXT_TABLES.ET_S3_CUSTOMER;

CREATE OR REPLACE EXTERNAL TABLE EXT_TABLES.ET_S3_ORDERS(


CUST_ID NUMBER AS (value:c1::NUMBER),
NUM_ORDERS NUMBER AS (value:c2::NUMBER)
)
WITH
LOCATION = @MYOWN_DB.EXT_STAGES.MYS3_STAGE
PATTERN = '.*orders.*'
FILE_FORMAT = MYOWN_DB.FILE_FORMATS.CSV_FILEFORMAT
;

SELECT * FROM EXT_TABLES.ET_S3_ORDERS;

// To see external tables


DESC EXTERNAL TABLE EXT_TABLES.ET_S3_CUSTOMER TYPE = 'column';
DESC EXTERNAL TABLE EXT_TABLES.ET_S3_CUSTOMER TYPE = 'stage';

// To see the files it is referring


SELECT DISTINCT METADATA$FILENAME FROM EXT_TABLES.ET_S3_CUSTOMER;

----------------------------

// Analyze the data

// Requirement: Get the list of customer who placed more than 10 orders
SELECT C.CUST_ID, C.CUSTNAME, SUM(O.NUM_ORDERS)
FROM EXT_TABLES.ET_S3_CUSTOMER C
INNER JOIN EXT_TABLES.ET_S3_ORDERS O
ON C.CUST_ID=O.CUST_ID
GROUP BY C.CUST_ID, C.CUSTNAME HAVING SUM(O.NUM_ORDERS) > 10;

// Requirement: Get the list of customer who did not placed any order
SELECT C.CUST_ID, C.CUSTNAME, SUM(O.NUM_ORDERS)
FROM EXT_TABLES.ET_S3_CUSTOMER C
INNER JOIN EXT_TABLES.ET_S3_ORDERS O
ON C.CUST_ID=O.CUST_ID
GROUP BY C.CUST_ID, C.CUSTNAME HAVING SUM(O.NUM_ORDERS) = 0;

-------------------------

// Views on External tables

// Create a schema for views


CREATE SCHEMA IF NOT EXISTS MYVIEWS;

// Create a secure view


CREATE OR REPLACE SECURE VIEW MYVIEWS.SECVW_ET_CUST
AS
SELECT C.CUST_ID, SUM(O.NUM_ORDERS) TOT_ORDERS
FROM EXT_TABLES.ET_S3_CUSTOMER C
INNER JOIN EXT_TABLES.ET_S3_ORDERS O
ON C.CUST_ID=O.CUST_ID
GROUP BY C.CUST_ID HAVING SUM(O.NUM_ORDERS) > 10;

// Query the secure view


SELECT * FROM MYVIEWS.SECVW_ET_CUST;

// Create materialized view


CREATE OR REPLACE SECURE VIEW MYVIEWS.MATVW_ET_CUST
AS
SELECT * FROM EXT_TABLES.ET_S3_CUSTOMER WHERE STATE='Victoria';
// Query the secure view
SELECT * FROM MYVIEWS.MATVW_ET_CUST;

You might also like