데이터를 확인하다보니 매출 데이터가 전혀 없는 날이 확인됩니다. 매출과 날씨가 관련이 있을 것으로 보고 이를 확인하기 위하여 마켓플레이스에서 날씨 데이터를 가져와 이를 확인하도록 하겠습니다

+를 클릭하여 새 SQL Worksheet를 만듭니다...을 클릭하여 RENAME합니다뷰 생성을 위해 다음과 같이 컨텍스트를 설정합니다
// 컨텍스트 설정 USE ROLE tasty_data_engineer; USE DATABASE tasty_db ;
이전 실습에서 적재한 테이블을 이용하여 뷰를 생성합니다
// harmonized 스키마에 orders_v 뷰 생성 CREATE OR REPLACE VIEW harmonized.orders_v AS SELECT oh.order_id, oh.truck_id, oh.order_ts, od.order_detail_id, od.line_number, m.truck_brand_name, m.menu_type, t.primary_city, t.region, t.country, t.franchise_flag, t.franchise_id, f.first_name AS franchisee_first_name, f.last_name AS franchisee_last_name, l.location_id, cl.customer_id, cl.first_name, cl.last_name, cl.e_mail, cl.phone_number, cl.children_count, cl.gender, cl.marital_status, od.menu_item_id, m.menu_item_name, od.quantity, od.unit_price, od.price, oh.order_amount, oh.order_tax_amount, oh.order_discount_amount, oh.order_total FROM raw_pos.order_detail od JOIN raw_pos.order_header oh ON od.order_id = oh.order_id JOIN raw_pos.truck t ON oh.truck_id = t.truck_id JOIN raw_pos.menu m ON od.menu_item_id = m.menu_item_id JOIN raw_pos.franchise f ON t.franchise_id = f.franchise_id JOIN raw_pos.location l ON oh.location_id = l.location_id LEFT JOIN raw_customer.customer_loyalty cl ON oh.customer_id = cl.customer_id; // analytics 스키마에 orders_v 뷰 생성 CREATE OR REPLACE VIEW analytics.orders_v AS SELECT DATE(o.order_ts) AS date, * FROM harmonized.orders_v o;
// 컨텍스트 설정 --USE ROLE tasty_data_engineer; --USE DATABASE tasty_db ; USE WAREHOUSE tasty_de_wh;
// order_v를 이용하여 데이터 조회 SELECT o.date, SUM(o.price) AS daily_sales FROM tasty_db.analytics.orders_v o WHERE 1=1 AND o.country = 'Germany' AND o.primary_city = 'Hamburg' AND DATE(o.order_ts) BETWEEN '2022-02-10' AND '2022-02-28' GROUP BY o.date ORDER BY o.date ASC;
- 16일부터 21일까지의 매출 데이터가 없습니다. 이런 현상이 발생한 이유를 확인해 보도록 하겠습니다

Get 버튼을 누릅니다Options를 열어서 데이터베이스 이름을 Weather_Source 로 정합니다Get 버튼을 클릭합니다
Done을 클릭합니다// 푸드 트럭 운영 국가의 날씨 데이터 조회 view 생성 CREATE OR REPLACE VIEW harmonized.daily_weather_v AS SELECT hd.*, TO_VARCHAR(hd.date_valid_std, 'YYYY-MM') AS yyyy_mm, pc.city_name AS city, c.country AS country_desc FROM weather_source.onpoint_id.history_day hd JOIN weather_source.onpoint_id.postal_codes pc ON pc.postal_code = hd.postal_code AND pc.country = hd.country JOIN raw_pos.country c ON c.iso_country = hd.country AND c.city = hd.city_name;
daily_weather_v 뷰를 사용하여 2022년 2월의 함부르크의 일평균 기온을 확인합니다
// 2022년 2월의 함부르크의 일평균 기온 SELECT dw.country_desc, dw.city_name, dw.date_valid_std, AVG(dw.avg_temperature_air_2m_f) AS avg_temperature_air_2m_f FROM harmonized.daily_weather_v dw WHERE 1=1 AND dw.country_desc = 'Germany' AND dw.city_name = 'Hamburg' AND YEAR(date_valid_std) = '2022' AND MONTH(date_valid_std) = '2' GROUP BY dw.country_desc, dw.city_name, dw.date_valid_std ORDER BY dw.date_valid_std DESC;
위의 결과를 그래프로 생성하여 시각화 합니다
Chart를 클릭합니다none으로 설정합니다
daily_weather_v 뷰를 사용하여 2022년 2월의 함부르크의 바람의 최대값을 확인합니다. 이전에 확인하던 방법과 마찬가지로 그래프로 시각화 해봅니다
// 2022년 2월의 함부르크의 일 최대 풍속 SELECT dw.country_desc, dw.city_name, dw.date_valid_std, MAX(dw.max_wind_speed_100m_mph) AS max_wind_speed_100m_mph FROM harmonized.daily_weather_v dw WHERE 1=1 AND dw.country_desc IN ('Germany') AND dw.city_name = 'Hamburg' AND YEAR(date_valid_std) = '2022' AND MONTH(date_valid_std) = '2' GROUP BY dw.country_desc, dw.city_name, dw.date_valid_std ORDER BY dw.date_valid_std DESC ;
Chart를 클릭합니다
지금까지 확인한 내용을 매출과 날씨를 통합하여 직접 확인할 수 있는 분석 뷰를 만들어 사용자에게 제공하려고 합니다.
그리고 사용자에게는 화씨보다 익숙한 섭씨로 온도를 표현하고 인치를 밀리미터로 보여주려고 합니다.
SQL함수를 생성합니다
// 화씨를 섭씨로 CREATE OR REPLACE FUNCTION analytics.fahrenheit_to_celsius(temp_f NUMBER(35,4)) RETURNS NUMBER(35,4) AS $$ (temp_f - 32) * (5/9) $$; // 인치를 밀리미터로 CREATE OR REPLACE FUNCTION analytics.inch_to_millimeter(inch NUMBER(35,4)) RETURNS NUMBER(35,4) AS $$ inch * 25.4 $$;
매출과 날씨를 결합한 SQL 작성합니다
// 매출과 날씨 SELECT fd.date_valid_std AS date, fd.city_name, fd.country_desc, ZEROIFNULL(SUM(odv.price)) AS daily_sales, ROUND(AVG(fd.avg_temperature_air_2m_f),2) AS avg_temperature_fahrenheit, ROUND(AVG(analytics.fahrenheit_to_celsius(fd.avg_temperature_air_2m_f)),2) AS avg_temperature_celsius, ROUND(AVG(fd.tot_precipitation_in),2) AS avg_precipitation_inches, ROUND(AVG(analytics.inch_to_millimeter(fd.tot_precipitation_in)),2) AS avg_precipitation_millimeters, MAX(fd.max_wind_speed_100m_mph) AS max_wind_speed_100m_mph FROM harmonized.daily_weather_v fd LEFT JOIN harmonized.orders_v odv ON fd.date_valid_std = DATE(odv.order_ts) AND fd.city_name = odv.primary_city AND fd.country_desc = odv.country WHERE 1=1 AND fd.country_desc = 'Germany' AND fd.city = 'Hamburg' AND fd.yyyy_mm = '2022-02' GROUP BY fd.date_valid_std, fd.city_name, fd.country_desc ORDER BY fd.date_valid_std ASC;
위의 쿼리를 이용하여 원하는 도시의 매출액과 날씨를 볼 수 있는 뷰를 만들어 사용자에게 제공하려고 합니다
// 매출과 날씨 뷰 CREATE OR REPLACE SECURE VIEW analytics.daily_city_metrics_v AS SELECT fd.date_valid_std AS date, fd.city_name, fd.country_desc, ZEROIFNULL(SUM(odv.price)) AS daily_sales, ROUND(AVG(fd.avg_temperature_air_2m_f),2) AS avg_temperature_fahrenheit, ROUND(AVG(analytics.fahrenheit_to_celsius(fd.avg_temperature_air_2m_f)),2) AS avg_temperature_celsius, ROUND(AVG(fd.tot_precipitation_in),2) AS avg_precipitation_inches, ROUND(AVG(analytics.inch_to_millimeter(fd.tot_precipitation_in)),2) AS avg_precipitation_millimeters, MAX(fd.max_wind_speed_100m_mph) AS max_wind_speed_100m_mph FROM harmonized.daily_weather_v fd LEFT JOIN harmonized.orders_v odv ON fd.date_valid_std = DATE(odv.order_ts) AND fd.city_name = odv.primary_city AND fd.country_desc = odv.country WHERE 1=1 GROUP BY fd.date_valid_std, fd.city_name, fd.country_desc ORDER BY fd.date_valid_std ASC;
// 함부르크의 2022년 2월의 일별 매출액과 평균 기온, 평균 강우량, 최대 풍속 SELECT dcm.date, dcm.city_name, dcm.country_desc, dcm.daily_sales, dcm.avg_temperature_celsius, dcm.avg_precipitation_millimeters, dcm.max_wind_speed_100m_mph FROM analytics.daily_city_metrics_v dcm WHERE 1=1 AND dcm.country_desc = 'Germany' AND dcm.city_name = 'Hamburg' AND dcm.date BETWEEN '2022-02-01' AND '2022-02-28' ORDER BY date DESC;
데이터 공유를 위한 데이터 셋을 만듭니다
// 공유할 테이블 생성 CREATE OR REPLACE TABLE analytics.daily_hamburg_202202 AS SELECT dcm.date, dcm.city_name, dcm.country_desc, dcm.daily_sales, dcm.avg_temperature_celsius, dcm.avg_precipitation_millimeters, dcm.max_wind_speed_100m_mph FROM analytics.daily_city_metrics_v dcm WHERE 1=1 AND dcm.country_desc = 'Germany' AND dcm.city_name = 'Hamburg' AND dcm.date BETWEEN '2022-02-01' AND '2022-02-28' ;
소비자, 즉 공유 받을 대상은 account 이름을 공급자에게 알려줘야 하는데 다음 쿼리를 통해 account 이름을 찾을 수 있습니다
SELECT CURRENT_ACCOUNT();
다음과 같은 단계로 공급자는 데이터를 공유합니다
ACCOUNTADMIN으로 전환합니다Share > Create a Direct Share 
Select Data > TASTY_DB > ANALYTICS > Table DoneCreate Share
데이터를 공유받은 소비자는 다음과 같은 절차를 거쳐 로컬 데이터베이스와 같이 사용할 수 있게 됩니다
Get Data 클릭View Database또는 Done 클릭
