How to create JSON/Nested JSON files in AWS S3 from Snowflake tables/views ?

JSON format is one of the widely data format with diverse uses in electronic data exchange, including that of web applications with servers. Most of the web applications use JSON to exchange the application information.

In this article we will cover how to create JSON files in AWS S3 from Snowflake tables/views.

JSON file content format:

{"Key" : "value"}

Overview of snowflake function which is used in this article to work with JSON format:

OBJECT_CONSTRUCT : The function is useful to export Snowflake plain table to json. The OBJECT_CONSTRUCT function either accepts a sequence of zero or more key-value-pairs. <CLICK HERE for snowflake documentation>

Syntax:

OBJECT_CONSTRUCT( [<key1>, <value1> [, <keyN>, <valueN> ...]] )

OBJECT_CONSTRUCT( * )

Example:

SELECT OBJECT_CONSTRUCT(‘NAME’, ’XXXX’, ’DEPT’,’ IT’, ’SCORE’, ’90');

Output:

ARRAY_AGG: This function will accept input values and pivot them into an array, allowing a group of values to be returned for each row. Rather than performing an aggregate function against the values, such as SUM or AVG, they are pivoted into a list. <Click Here> for snowflake documentation.

Syntax:

ARRAY_AGG( [ DISTINCT ] <expr1> ) [ WITHIN GROUP ( <orderby_clause> ) ]

Example:

WITH SAMPLE_ARRY_AGG AS 
(
SELECT 'XXXX' AS NAME,'IT' AS DEPT ,'90' AS SCORE
UNION ALL
SELECT 'YYYY' AS NAME,'IT' AS DEPT,'190' AS SCORE
UNION ALL
SELECT 'ZZZZ' AS NAME,'CSE' AS DEPT,'90' AS SCORE
)
SELECT
'DEPARTMENT', SAMPLE_ARRY_AGG.DEPT,
ARRAY_AGG(OBJECT_CONSTRUCT(*))
FROM SAMPLE_ARRY_AGG
GROUP BY SAMPLE_ARRY_AGG.DEPT

Output:

How to extract JSON from Snowflake tables and views ?

Step 1: Script for creation of new Database, Schema and Table

CREATE OR REPLACE DATABASE DEMO;USE DATABASE DEMO;CREATE SCHEMA SNOW_EXTRACT;USE SCHEMA SNOW_EXTRACT;CREATE or REPLACE TABLE CLASS_STUDENT(
STUDENT_ID INT,
NAME VARCHAR(300),
DEPT VARCHAR(300),
GRADE VARCHAR(300),
ENTRY_DATE DATE);
INSERT INTO CLASS_STUDENT
VALUES
(11401,'AAMEENA','IT','S',SYSDATE()),
(11402,'ALAGAPPAN','IT','S',SYSDATE()),
(11403,'ARUN','IT','B',SYSDATE()),
(11404,'ASHWIN','IT','A',SYSDATE()),
(11405,'ASHITA','IT','S',SYSDATE()),
(11406,'ALEX','IT','S',SYSDATE()),
(11407,'AROKIA MARRY PRICSILLA','IT','A',SYSDATE()),
(11108,'DOSS','CSE','S',SYSDATE());

Output:

SELECT * FROM CLASS_STUDENT;

Step 2: How to Constructs an object by defining keys and its corresponding values ?

SELECT
OBJECT_CONSTRUCT
('UNIQUE ID',STUDENT_ID,
'NAME OF THE STUDENT',NAME,
'DEPARTMENT',DEPT,
'JOINING DATE',ENTRY_DATE,
'SECURED GRADE',GRADE)
FROM
CLASS_STUDENT;
Output of CLASS_STUDENT table by using OBJECT_CONSTRUCT function

Step 3: By creating an External stage in snowflake which will help to load the data in AWS S3

CREATE OR REPLACE STAGE DEMO.SNOW_EXTRACT.SNOW_DEMO 
URL = "s3://demoobjectconstruct"
CREDENTIALS=(aws_key_id='<Enter AWS Key ID>' aws_secret_key='<Enter AWS Secret Key>'
— UNLOAD THE DATA IN JSON FORMATCREATE OR REPLACE FILE FORMAT JSON_FORMAT
TYPE = ‘JSON’;

Step 4 : Details of AWS S3 bucket with Access Key Creation

Create Access key details by navigating in to IAM menu in AWS:

After successful creation download the excel file to get the AWS_KEY_ID and AWS_SECRET_KEY

Step 5: JSON file Generation

COPY INTO
@DEMO.SNOW_EXTRACT.SNOW_DEMO / UNLOADJSONFILE_DEMO
FROM
(
SELECT OBJECT_CONSTRUCT
(
'UNIQUE ID', STUDENT_ID,
'NAME OF THE STUDENT', NAME,
'DEPARTMENT', DEPT,
'JOINING DATE', ENTRY_DATE,
'SECURED GRADE', GRADE)
FROM CLASS_STUDENT)
FILE_FORMAT = JSON_FORMAT;
Creation of JSON file in External Stage Location
JSON file in AWS S3 Bucket

Output:

Step 6: How to create Nested JSON ?

COPY INTO @DEMO.SNOW_EXTRACT.SNOW_DEMO / NEXTEDJSONFILE_DEMO
FROM
(
WITH STUDENT_JSON AS(
SELECT
STUDENT_ID,NAME,DEPT,ENTRY_DATE,GRADE
FROM
CLASS_STUDENT

ORDER BY
STUDENT_ID,NAME,DEPT,ENTRY_DATE,GRADE)
SELECT
OBJECT_CONSTRUCT(
'DEPARTMENT',STUDENT_JSON.DEPT,
'COLUMNS',ARRAY_AGG(OBJECT_CONSTRUCT(*)))
FROM STUDENT_JSON
GROUP BY STUDENT_JSON.DEPT
ORDER BY STUDENT_JSON.DEPT)
FILE_FORMAT = JSON_FORMAT;
Snowflake Execution
JSON file Output in AWS S3

Output:

References:-

--

--