לעשות POC לבחינת טכנולוגיה ועד כמה היא מתאימה לכם יכולה להיות משימה לא קצרה, לא משהו שיש לכם זמן אליו בתוך כל השיגעון של השוטף, ובוודאי כשאתם לא יודעים לומר אם ועד כמה זה ישנה לכם את החיים. עם זאת עדיין יכול להיות שאתם עובדים נורא קשה כאשר ישנן טכנולוגיות שיכולות לעשות לכם את החיים הרבה יותר פשוטים. אז איך בכל זאת אפשר לבחון טכנולוגיה חדשה?

אנחנו רוצים להציע לכם דרך אחרת, שיטה שחשבנו עליה אחרי הובלה של הרבה תהליכי POC על Snowflake, שכמעט בכל המקרים המפתחים אמרו בסוף שחבל שלא הכירו קודם את הטכנולוגיה.

המטרה של התהליך היא לעזור לכם להבין האם ועד כמה כדאי לכם להתפנות ולהריץ תהליך POC מסודר על Snowflake. לצורך זה יצרנו רשימת Use cases עם קבצי דאטה מוכנים, שאילתות וזמני ריצה על סנופלייק, כך שתוכלו פשוט להוריד את הנתונים ואת התרחישים הרלוונטיים ביותר למקרה שלכם, להריץ על הסביבה שלכם ולהשוות.  התהליך אמור להתקצר דרמטית כי הרוב מוכן, לכם נשאר להריץ (מדובר בסטנדרט SQL אמור להתאים גם ללא שינוי).

במידה והתוצאות תהיינה מרשימות תוכלו להציג את המקרה ואת התוצאות לארגון שלכם עם מסקנות איך סנופלייק ביחס לטכנולוגיה הנוכחית שלכם והאם אתם חושבים  שהטכנולוגיה יכולה לעזור לכם. במידה וכן תוכלו לתכנן POC על המקרה הפרטי שלכם. אבל תבואו הרבה יותר מוכנים.

הקדמה - מדוע סנופלייק?

לפני שנתחיל, כמה מילים על סנופלייק ולמה בכלל אתם צריכים להכיר את הטכנולוגיה. סנופלייק איננו עוד בסיס נתונים אלא פלטפורמת דאטה שלמה הכוללת את כל המידע הארגוני. ניתן לראות בתמונה הבאה את התפתחות בסיסי הנתונים והפתרונות השונים בשנים האחרונות. החל במחסני נתונים On-Prem אליהם לא יכולנו לטעון את כל ה-Raw data ובוודאי שלא פתחנו אותם לכל משתמשי הארגון, דרך בסיסי נתונים MPP (או בסיסי נתונים בענן) שאיפשרו לרוץ על יותר נתונים עם ביצועים טובים יותר, בהמשך פלטפורמת Hadoop  שאפשרה לטעון את כל הנתונים הארגוניים אך היתה רק פתרון משלים למחסני הנתונים הקיימים ולבסוף לפתרון הענן של סנופלייק, שיודע לרוץ על כל העננים, כולל את כל הדאטה הארגוני ומאפשר לצמוח עם הארגון.

התפתחות בסיסי הנתונים בשנים האחרונות

הבשורה של סנופלייק היא מעבר מ-Traditional ל-Modern data platform

Traditional Data Platform
Modern Data Platform


למי תהליך הבחינה מתאים

האם אתם בכלל צריכים את זה?

ברור שלא כל אחד צריך לבחון את סנופלייק מחר בבוקר. יש כאלה שנמצאים במקום טוב עם הפתרון שלהם וזה פחות רלוונטי. מתי כן לעומת זאת? אם אתם מרגישים שאתם על הקצה, הביצועים לא מספיק טובים, המשאבים שלכם תמיד על 90%, כל פיתוח חדש לוקח לכם המון זמן כי אתם מפחדים שזה ישפיע על המודלים האחרים, אתם מרגישים שאתם עובדים קשה על פעולות שאמורות להיות בסיסיות או שתהליכי הטעינה שלכם פשוט לא מספיק מהירים כמו ב-POC הזה למשל, אז אנחנו רוצים להציע לכם תהליך בחינה מהיר שיתן לכם כיוון האם סנופלייק הוא אלטרנטיבה טובה, תהליך שתוכלו להריץ בעצמכם, ללא מגבלות אבטחת מידע, חוזים והתקשרויות. פשוט מורידים את התרחישים לסביבה הארגונית שלכם מריצים ומשווים לתוצאות שכבר הרצנו על סנופלייק. זה יכול להיות אורקל, MSSQL, הדופ, רדשיפט או כל תשתית שאתם משתמשים בה כיום, זה לא משנה. בעיקר מכיוון שסנופלייק הינו פתרון שיכול להחליף כל אחד מהפתרונות הללו ולספק פתרון מרכזי לכל צרכי הדאטה.

בסופו של דבר כל תהליך טכנולוגי חייב להביא איתו ערך עיסקי, אם השינוי שתעשו לא יביא ערך עיסקי מוטב לא להיכנס אליו. ערך עסקי יכול להיות תמיכה בתרחישים עיסקיים שאתם לא יכולים לתמוך בהם כיום, ביצועים טובים יותר שיביאו ליותר שימושיות בנתונים, הורדת עלויות תחזוקה, הבאת מידע ממקורות חיצוניים, החצנת הנתונים ללקוחות שלכם ועוד.

תהליך הבחינה - עשה זאת בעצמך

הנתונים בהם אנחנו נשתמש הינם נתוני ה-Benchmark הרשמיים המפורסמים באתר http://www.tpc.org/ למעשה סנופלייק מספקים אותם כ-Sample Data. ייצאנו את הנתונים ל-S3 וכתבנו סקריפט טעינה. מעל טבלאות אלו כתבנו שאילתות שונות כדי לבחון Use cases שונים. הקשורים לרוב לתהליכי עיבוד, שאילתות אנליטיות, פעולות Merge וכד׳.

הגדרת הפרמטרים להצלחה

לפני שיוצאים לדרך חשוב מאד להגדיר את המדדים להצלחה. המדדים יכולים להיות כמותיים (יש לנו תהליך שרץ 24 שעות, היעד שלי שיסיים בשעה) ויכולים להיות אכותיים (תהליכי התחזוקה מאד יקרים, אני צריך להגדיל חומרה כל שנה וכו׳)

לאחר הגדרת המדדים, ניתן להתקדם ולהגדיר את ה-Use cases שיענו על אותם מדדים.

נתוני ה-POC

הנתונים באים בגדלים שונים, ומאפשרים לכם לבחור את הנפח המתאים למקרה שלכם.

TPCH_SAMPLE נועד רק לצורך הרצות ראשוניות, לצורך בדיקת הסקריפט
הקבצים שמורים אצלנו בתיקיית S3 מוכנים להורדה, אנא צרו קשר במייל info@vision.bi ועזור לכם להתחיל את התהליך ועם לינק להורדת הקבצים.

יצירת הטבלאות

שלב ראשון ניצור את בסיס הנתונים, הסכמה והטבלאות. שימו לב שבכל בסיס נתונים הסקריפט עלול להיות שונה, יתכן ותרצו ליצור מפתחות על הטבלאות במקרים מסויימים וכו׳. כאן מצורף הסקריפט הפשוט ליצירת הטבלה הראשונה כדוגמה. את יתר הטבלאות תקבלו במייל עם הקישור לנתונים.

Create database SNOWFLAKE_VISONBI_BENCHMARK;
create schema TPCH_SF10;
use schema TPCH_SF10;
create table CUSTOMER
(
    C_CUSTKEY    NUMBER        not null,
    C_NAME       VARCHAR(25)   not null,
    C_ADDRESS    VARCHAR(40)   not null,
    C_NATIONKEY  NUMBER        not null,
    C_PHONE      VARCHAR(15)   not null,
    C_ACCTBAL    NUMBER(12, 2) not null,
    C_MKTSEGMENT VARCHAR(10),
    C_COMMENT    VARCHAR(117)
);
תקפידו על אותם השמות כדי שלא תצטרכו לשנות את השאילתות. 

טעינת נתונים

אתם כנראה תסתדרו היטב לטעון את הנתונים לסביבה שלכם, זו טעינה חד פעמית אז פחות חשוב איך אתם טוענים. לרוב בסיסי הנתונים יש פקודת Bulk מקובץ. אם בהמשך יהיו לנו דוגמאות לטעינה נשתף אותן כאן לשימוש הכלל.

אם אתם רוצים להריץ את ה-POC על סנופלייק ולהריץ בעצמכם את השאילתות, אתם גם יכולים.

לסנופלייק פקודת הטעינה מאד פשוטה והיא ניתנת ישירות מ-S3. כך גם Redshift ובסיס נתונים ענניים אחרים.

כדי לטעון מ-S3 מומלץ ליצור Stage

Use database SNOWFLAKE_VISONBI_BENCHMARK;
use schema TPCH_SF10;

create or replace STAGE BENCHMARK_STAGE
    url='s3://snowflake-benchmark'
    credentials = (AWS_KEY_ID='...'
               AWS_SECRET_KEY='......')
    FILE_FORMAT = (type=CSV, FILE_EXTENSION='.csv', COMPRESSION = GZIP , FIELD_OPTIONALLY_ENCLOSED_BY='"',FIELD_DELIMITER = ',');

לאחר מכן הטעינה נעשית באופן הבא (טבלת ה-CUSTOMER כדוגמא)

Truncate table CUSTOMER;
Insert into CUSTOMER(C_CUSTKEY,C_NAME,C_ADDRESS,C_NATIONKEY,C_PHONE,C_ACCTBAL,C_MKTSEGMENT,C_COMMENT)
Select $1,$2,$3,$4,$5,$6,$7,$8
From @BENCHMARK_STAGE/TPCH_SAMPLE/CUSTOMER

הרצת שאילתות

יפה! שלב המנהלות הסתיים ואפשר לעבור לתכלס. להתחיל להריץ שאילתות.

בשלב הזה עליכם לבחור את השאילתות הרלוונטיות אליכם. יש לנו מאגר גדול של Use cases ובמידה ויש לכם בקשה לבדוק מקרה פרטי, אין שום בעיה, הנתונים מוכנים אצלנו, נכתוב יחד את השאילתא ונוסיף את התוצאה לרשימת התוצאות המוכנות.

דוגמא לשאילתא

בשאילתא הבאה למשל אנחנו בודקים זמני ריצה של 5 Join-ים. טבלת ה-ORDERS במקרה הזה המ-SF10. כלומר 15M רשומות ב-Join לטבלת ה-LINEITEMS עם 60M רשומות ועוד Join לשלוש טבלאות נוספות בגדלים של 8M, 2M וכו׳

ניתוח התוצאות

התוצאה של השאילתא הזו למשל חזרה ב-

ניתוח התוצאות בסנופלייק - חשוב שתדעו לקרוא את התוצאות של הריצה, יש הבדל בין שאילתא שרצה בפעם הראשונה על ה-WH לבין שאילתא שרצה פעם שניה. בפעם הראשונה הנתונים עדין ב-Storage מרוחק. ולכן לקח 13 שניות על ה-Wh הכי קטן. לאחר מכן כשהדאטה היה על ה-Node התוצאה חזרה ב-3 שניות. זה לא Cache של תוצאת השאילתא(!), זה קאש של הדאטה, שכן סנופלייק מנהל את הדאטה החם שיהיה זמין לתחקור.

גודל ה-WH

בסנופלייק ניתן לבחור את גודל יחידת ה-Compute עליה מריצים את השאילתא. אחת העוצמות שלסנופלייק היא העובדה שזה ניתן לשינוי בשניות גם תוך כדי הסשן בפקודת SQL פשוטה. WH גדול יותר ביצועים טובים יותר וכמובן עלות גבוהה יותר. לרוב היחס לינארי, כלומר שאילתא שלוקחת 2 דקות על X-Small (עלות קרדיט 1 לשעה, כ-2$) תיקח שמינית מזה על Large (עלות של 8 קרדיטים לשעה, כ-16$). חשוב לציין שאתם משלמים רק כאשר רצות שאילתות (Sub second billing), לא משנה כמה שאילתות ולא משנה על כמה דאטה הן רצות.

ניתוח ה-Execution plan

ניתן לראות ב-UI את ה״עלויות״ של כל חלק בשאילתא לצורך אופטימיזציה. למרות שאין בסנופלייק אינדקסים או פרטישנים (למעט הגדרה אחת של Cluster by שצריך לעשות רק על טבלאות מעל 100 מליון רשומות)

לא רק ביצועים

חשוב מאד - לעיתים קרובות מידי יש נטיה להצמד לביצועים כמדד החשוב ביותר. אבל בעולמות ה-SAAS יש עוד המון משמעויות מעבר לביצועים.

גיבויים וזמינות - מנוהל על ידי סנופלייק
סביבות - פיתוח,  אנטגרציה ייצור. פשוט מאד לניהול (כולל העתקה של כל הסביבה בשניות)
תחזוקה - כמה זמן לקחה ההתקנה ותחילת העבודה
Tuning - כמה קשה הייתם צריכים לעבוד כדי להגיע לביצועים מספקים
Scale - כמה קל להוסיף Storage. כמה קל להוסיף Compute
ורסטיליות -כאשר ישנו מאמץ לגרום לשאילתא לעבוד, תמיד תהיה שאילתא אחרת שלא תעבוד
עקומת לימוד - האם קל להפעיל את הטכנולוגיה?

*בסופו של יום המטרה לי להרים פלטפורמה שקל לתחזק ושיכולה לגדול איתכם.

לסיכום

תהליך בחינת POC כזה יכול להתקצר פלאים כאשר יש למה להשוות, לא צריך להמציא את השאילתות ובטח שלא להריץ אותם על שתי הטכנולוגיות. אתם גם לא צריכים בשלב הזה ללמוד סנופלייק. את הטכנולוגיה שלכם אתם מכירים הכי טוב, תטענו את נקוני המקור אצלכם, תריצו את השאילתות המצורפות ואם התוצאות של סנופלייק יפילו אתכם זה יתן לכם את כל המוטיבציה להריץ POC מסודר. מצידנו נשמח לעזור לכם לעשות POC בסנופלייק על הנתונים שלכם ועל המקרה הפרטי שלכם.

נספח - שאילתות נוספות

  • שאילתת Join בין 2 טבלאות גדולות
  • שאילתת Group by
  • שאילתת Where
  • שאילתה לפתיחת Join
  • שאילתה לפתיחת Array

שאילתות אנליטיות

  • שאילתת rownum
  • שאילתת sum accum

תהליכי עיבוד

  • הכנסת נתונים
  • טעינת bulk
  • הרצת Update
  • הרצת Merge
  • מחיקה של חודש נתונים

בדיקת Concurrency

  • ריצה עם 5 שאילתות במקביל
  • ריצה עם 10
  • ריצה עם 20
שלב זה עדיין בעבודה...