0% found this document useful (0 votes)
36 views3 pages

Lab20 ExternalTables

Download as txt, pdf, or txt
Download as txt, pdf, or txt
Download as txt, pdf, or txt
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