נתונים מונחי אירועים עם אפאצ'י דרואיד

1. הקדמה

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

2. מושגי יסוד

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

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

2.1. מה הם נתוני אירועים?

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

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

2.2. מהו אפאצ'י דרואיד?

אפאצ'י דרויד הוא מאגר ניתוחים בזמן אמת המיועד לניתוח מהיר על פני נתונים מוכווני אירועים. דרואיד הוקמה בשנת 2011, במקור פתוח תחת רישיון GPL בשנת 2012, ועברה לרישיון אפאצ'י בשנת 2015. היא מנוהלת על ידי קרן אפאצ'י עם תרומות לקהילה מכמה ארגונים. הוא מספק בליעה בזמן אמת, ביצועי שאילתות מהירים וזמינות גבוהה.

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

3. אדריכלות דרואיד

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

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

3.1. עיצוב אחסון נתונים

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

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

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

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

3.2. תהליכים דרואידים

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

  • רכז: תהליך זה אחראי בעיקר על ניהול והפצת המגזרים ומתקשר עם תהליכים היסטוריים כדי לטעון או להפיל קטעים על בסיס תצורות
  • אדון: זהו התהליך העיקרי שאחראי על קבלת משימות, תיאום חלוקת משימות, יצירת נעילות סביב משימות והחזרת מצב למתקשרים
  • סַרְסוּר: זהו התהליך אליו כל השאילתות נשלחות לביצוע באשכול מבוזר; הוא אוסף מטא-נתונים מ- Zookeeper ומנתב שאילתות לתהליכים עם הקטעים הנכונים
  • נתב: זהו תהליך אופציונלי שיכול לשמש לניתוב שאילתות לתהליכי מתווך שונים, ובכך לספק בידוד שאילתות לשאילתות לקבלת נתונים חשובים יותר.
  • הִיסטוֹרִי: אלה התהליכים המאחסנים נתונים שאפשר לשאול עליהם; הם שומרים על קשר מתמיד עם Zookeeper ורואים מידע על קטעים שעליהם לטעון ולהגיש
  • MiddleManager: אלה הם תהליכי העובדים שמבצעים את המשימות שהוגשו; הם מעבירים את המשימות לפליונים הפועלים במכשירי JVM נפרדים, ובכך מספקים בידוד משאבים ויומנים

3.3. תלות חיצונית

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

בואו נראה כיצד נוצר אשכול דרואידים יחד עם תהליכי ליבה ותלות חיצונית:

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

ה אחסון מטא נתונים משמש להחזקת מטא נתונים של מערכת משותפת כמו מידע על שימוש בפלחים ומידע על משימות. עם זאת, הוא מעולם לא משמש לאחסון הנתונים בפועל. זהו מסד נתונים יחסי כמו Apache Derby, PostgreSQL או MySQL.

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

4. התקנת דרואידים

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

כמו כן, דרואיד נתמך רק בסביבות דמויות יוניקס ולא ב- Windows. יתר על כן, Java 8 ואילך נדרש להפעלת תהליכים דרואידים. ישנן מספר תצורות של שרת יחיד להגדרת Druid במחשב יחיד להפעלת הדרכות ודוגמאות. עם זאת, להפעלת עומס עבודה בייצור, מומלץ להקים אשכול דרואידים מן המניין עם מספר מכונות.

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

אנחנו חייבים לספק ערכי תצורה ל- Druid כמשתני סביבה. הדרך הקלה ביותר להשיג זאת היא לספק קובץ הנקרא "סביבה" באותה ספריה כמו קובץ ה- Docker.

ברגע שיש לנו את ההרכבה של Docker ואת קובץ הסביבה במקום, הפעלת דרואיד היא פשוטה כמו הפעלת פקודה באותה ספרייה:

דוקר-להלחין

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

5. בליעת נתונים

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

עכשיו, כפי שהתכנסנו עד כה, עלינו לעשות זאת לאסוף נתונים שהם אירועים ויש להם אופי זמני, כדי להפיק את המרב מהתשתית הדרואדית.

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

5.1. מודל נתונים

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

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

{"time": "2015-09-12T02: 10: 26.679Z", "channel": "# pt.wikipedia", "cityName": null, "comment": "Houveram problemas na última edição e tive de refazê- las, junto com as atualizações da página. "," countryIsoCode ":" BR "," countryName ":" Brazil "," isAnonymous ": true," isMinor ": false," isNew ": false," isRobot ": false , "isUnpatrolled": true, "metroCode": null, "namespace": "Main", "page": "Catarina Muniz", "regionIsoCode": null, "regionName": null, "user": "181.213.37.148 "," delta ": 197," added ": 197," delete ": 0}

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

  • חותמת זמן
  • ממדים
  • מדדים

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

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

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

5.2. שיטות בליעה

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

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

יתכן שיש לנו גם מקרים מגוונים לשימוש בנתונים לפיתרון, ולדרואיד יש תמיכה נהדרת ברובם. בוא נעבור על שתיים מהדרכים הנפוצות ביותר לשימוש בדרואיד בצינור נתונים:

  • הזרמת בליעה
  • בליעה קבוצה

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

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

5.3. הגדרת מפרט המשימות

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

בואו נגדיר תחילה מפרט משימה פשוט להטמעת הנתונים שלנו בקובץ שנקרא wikipedia-index.json:

{"type": "index_parallel", "spec": {"dataSchema": {"dataSource": "wikipedia", "dimensionsSpec": {"dimensions": ["channel", "cityName", "comment", " countryIsoCode "," countryName "," isAnonymous "," isMinor "," isNew "," isRobot "," isUnpatrolled "," metroCode "," namespace "," page "," regionIsoCode "," regionName "," user " , {"name": "added", "type": "long"}, {"name": "delete", "type": "long"}, {"name": "delta", "type": "long"}]}, "timestampSpec": {"column": "time", "format": "iso"}, "metricsSpec": [], "granularitySpec": {"type": "uniform", " segmentGranularity ":" day "," queryGranularity ":" none "," intervals ": [" 2015-09-12 / 2015-09-13 "]," rollup ": false}}," ioConfig ": {" type ":" index_parallel "," inputSource ": {" type ":" local "," baseDir ":" quickstart / tutorial / "," filter ":" wikiticker-2015-09-12-sampled.json.gz "} , "inputFormat": {"type": "json"}, "appendToExisting": false}, "tuningConfig": {"type": "index_parallel", "maxRowsPerSegment": 5000000, "maxRo wsInMemory ": 25000}}}

בואו להבין את מפרט המשימה הזה ביחס ליסודות שעברנו בחלקי המשנה הקודמים:

  • בחרנו ב- אינדקס_מקביל המשימה, המספקת לנו בליעת אצווה מקומית במקביל
  • למקור הנתונים בו נשתמש במשימה זו יש את השם "wikipedia ”
  • חותמת הזמן לנתונים שלנו מגיעה מהתכונה "זמן"
  • ישנן מספר מאפייני נתונים שאנו מוסיפים כממדים
  • איננו משתמשים במדדים כלשהם עבור הנתונים שלנו במשימה הנוכחית
  • יש להשבית את האוסף המופעל כברירת מחדל למשימה זו
  • מקור הקלט למשימה הוא קובץ מקומי בשם wikiticker-2015-09-12-sampled.json.gz
  • איננו משתמשים בשום מחיצה משנית, אותה אנו יכולים להגדיר ב- tuningConfig

מפרט משימה זה מניח שהורדנו את קובץ הנתוניםwikiticker-2015-09-12-sampled.json.gz ושמר אותו במכונה המקומית בה דרויד פועל. זה עשוי להיות מסובך יותר כאשר אנו מפעילים את דרואיד כמכולה של דוקר. למרבה המזל דרויד מגיע עם נתוני הדוגמה הנוכחיים כברירת מחדל במיקום הפעלה / הדרכה מהירה.

5.4. הגשת מפרט המשימות

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

תלתל -X 'POST' -H 'סוג תוכן: יישום / json' -d @ wikipedia-index.json // localhost: 8081 / druid / indexer / v1 / task

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

5.5. מושגי בליעה מתקדמים

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

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

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

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

6. שאילתת נתונים

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

שתי הדרכים הבולטות לבניית שאילתות בדרואיד הן שאילתות מקוריות ושאילתות דמויי SQL. אנחנו הולכים ל לבנות כמה שאילתות בסיסיות בשתי הדרכים הללו ולשלוח אותן באמצעות HTTP באמצעות סִלְסוּל. בואו נגלה כיצד נוכל ליצור מספר שאילתות פשוטות על הנתונים שקבלנו קודם לכן בדרואיד.

6.1. שאילתות מקומיות

שאילתות מקומיות בדרואיד השתמש באובייקטים של JSON, אותם אנו יכולים לשלוח למתווך או לנתב לעיבוד. אנו יכולים לשלוח את השאילתות דרך פקודת HTTP POST, בין היתר, לעשות זאת.

בואו ניצור קובץ JSON בשם simple_query_native.json:

{"queryType": "topN", "dataSource": "wikipedia", "intervals": ["2015-09-12 / 2015-09-13"], "granularity": "הכל", "dimension": " page "," metric ":" count "," threshold ": 10," aggregations ": [{" type ":" count "," name ":" count "}]}

זו שאילתה פשוטה שמביאה את עשרת הדפים הראשונים שקיבלו את מספר העריכות העמודים העליונים בין ה -12 ל -13 בספטמבר 2019.

בואו נפרסם זאת באמצעות HTTP באמצעות סִלְסוּל:

תלתל -X 'POST' -H 'סוג תוכן: יישום / json' -d @ simple_query_native.json // localhost: 8888 / druid / v2? יפה

תגובה זו מכילה את הפרטים של עשרת העמודים הראשונים בפורמט JSON:

[{"חותמת זמן": "2015-09-12T00: 46: 58.771Z", "תוצאה": [{"count": 33, "page": "Wikipedia: Vandalismusmeldung"}, {"count": 28, " דף ":" משתמש: Cyde / רשימת מועמדים למחיקה מהירה / דף משנה "}, {" count ": 27," page ":" Jeremy Corbyn "}, {" count ": 21," page ":" Wikipedia: לוח מודעות / תקריות של מנהלי מערכת "}, {" count ": 20," page ":" Flavia Pennetta "}, {" count ": 18," page ":" Total Drama Presents: The Ridonculous Race "}, {" count ": 18," page ":" שיחת משתמש: Dudeperson176123 "}, {" count ": 18," page ":" Wikipedia: Le Bistro / 12 septembre 2015 "}, {" count ": 17," page ": "ויקיפדיה: בחדשות / מועמדים"}, {"ספירה": 17, "עמוד": "ויקיפדיה: בקשות להגנת עמודים"}]}]

6.2. דרואיד SQL

לדרואיד יש שכבת SQL מובנית, המציעה לנו את החופש לבנות שאילתות במבנים דמויי SQL מוכרים. הוא ממנף את Apache Calcite לניתוח ותכנון השאילתות. עם זאת, Druid SQL ממיר את שאילתות SQL לשאילתות מקומיות במתווך השאילתות לפני שהוא שולח אותן לתהליכי נתונים.

בואו נראה איך נוכל ליצור את אותה שאילתה כמו קודם, אך באמצעות SQL של ​​דרואיד. כמו בעבר, ניצור קובץ JSON בשם simple_query_sql.json:

{"query": "בחר דף, COUNT (*) כמו ספירות / מוויקיפדיה איפה \" __ זמן \ "/ בין TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00 : 00 '/ קבוצה לפי עמוד סדר לפי עריכות DESC LIMIT 10 "}

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

תלתל -X 'POST' -H 'סוג תוכן: יישום / json' -d @ simple_query_sql.json // localhost: 8888 / druid / v2 / sql

הפלט צריך להיות דומה מאוד למה שהשגנו קודם עם השאילתה המקורית.

6.3. סוגי שאילתות

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

חלק מהפופולריים כוללים Timeseries ו- GroupBy.

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

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

ישנם מספר סוגי שאילתות אחרים, כולל לִסְרוֹק, לחפש, TimeBoundary, SegmentMetadata, ו DatasourceMetadata.

6.4. מושגי שאילתה מתקדמים

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

בעוד שדיון מפורט עליהם חורג מתחום הדרכה זו, בואו נדון כמה מהחשובים כמו Joins and Lookups, Multitenancy ו- Query Caching.

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

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

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

7. כריכות שפה

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

נראה במהירות כיצד נוכל לבנות את TopN שאילתה בה השתמשנו קודם באמצעות ספריית לקוח זו ב- Java.

נתחיל בהגדרת התלות הנדרשת ב- Maven:

 in.zapr.druidry druidry 2.14 

לאחר מכן אנו אמורים להיות מסוגלים להשתמש בספריית הלקוחות וליצור את TopN שאילתא:

DateTime startTime = DateTime חדש (2015, 9, 12, 0, 0, 0, DateTimeZone.UTC); DateTime endTime = DateTime חדש (2015, 9, 13, 0, 0, 0, DateTimeZone.UTC); מרווח זמן = מרווח חדש (startTime, endTime); גרעיניות גרעיניות = SimpleGranularity חדשה (PredefinedGranularity.ALL); ממד DruidDimension = SimpleDimension חדש ("עמוד"); מדד TopNMetric = SimpleMetric חדש ("ספירה"); שאילתת DruidTopNQuery = DruidTopNQuery.builder () .dataSource ("ויקיפדיה"). ממד (ממד). סף (10). TopNMetric (מדד). גרנורליות (פירוט). פילטר (פילטר). אגרגטורים (Arrays.asList (חדש LongSumAggregator) (ספירה "," ספירה "))). אינטרוולים (Collections.singletonList (מרווח)). build ();

לאחר מכן, אנו יכולים פשוט ליצור את מבנה JSON הנדרש, בו נוכל להשתמש בשיחת ה- HTTP POST:

ממפה ObjectMapper = ObjectMapper חדש (); מחרוזת חובה Json = mapper.writeValueAsString (שאילתה);

8. מסקנה

במדריך זה עברנו את היסודות של נתוני אירועים וארכיטקטורת Apache Druid.

יתר על כן, הקמנו אשכול דרואידים ראשי באמצעות מכלי Docker במחשב המקומי שלנו. לאחר מכן, עברנו גם את תהליך בליעת מערך נתונים לדוגמה ב- Druid באמצעות משימת האצווה המקורית. אחרי זה ראינו את הדרכים השונות שיש לנו לשאול את הנתונים שלנו בדרואיד. לבסוף, עברנו בספריית לקוחות בג'אווה לבניית שאילתות דרואיד.

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

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


$config[zx-auto] not found$config[zx-overlay] not found