במסמך הזה מוסבר איך לשלב בין Google Earth Engine (EE) לבין BigQuery (BQ) כדי לבצע ניתוח גיאו-מרחבי יעיל. הוא כולל העברת נתונים בין שתי הפלטפורמות, שיקולים לגבי ביצועים, מגבלות והשלכות עלויות.
מהו BigQuery?
BigQuery הוא מחסן נתונים (data warehouse) ללא שרת של Google, שמנוהל באופן מלא ומאפשר לבצע ניתוחים של כמויות גדולות של נתונים (פטה-בייט) עם יכולת התאמה רחבה. היא מצטיינת בשאילתות SQL במהירות גבוהה ותומכת בנתונים גיאו-מרחביים.
מתי כדאי להשתמש ב-BigQuery או ב-Earth Engine?
| BigQuery | Earth Engine | |
|---|---|---|
| סוג הנתונים | בעיקר נתוני וקטורים אנליטיים ומובְנים. תמיכה בפעולות גיאו-מרחביות על נתוני GEOGRAPHY. |
בעיקר נתוני רסטר, אבל יש גם תמיכה בנתוני וקטורים. |
| בעיבוד | שאילתות שמבוססות על SQL, שעברו אופטימיזציה לצבירות ולצירופי נתונים בקנה מידה גדול. שילוב מעמיק עם BQ Machine Learning. | ממשקי API של JavaScript ו-Python לעיבוד ולניתוח של נתוני רסטר, כולל אלגוריתמים גיאו-מרחביים מתקדמים ולמידת מכונה. |
| קנה מידה | אחסון וניתוח בקנה מידה של פטה-בייט. התמקדות בעיבוד נתונים טבלאיים. | אחסון וניתוח בקנה מידה של פטה-בייט. התמקדות בניתוח גיאו-מרחבי, עם מגבלות על קנה המידה של עיבוד נתוני וקטורים. |
| תרחישים לדוגמה | מחסני נתונים, בינה עסקית, ניתוח גיאו-מרחבי במערכי נתונים גדולים של וקטורים. | ניתוח גיאו-מרחבי, חישה מרחוק, מעקב סביבתי ולמידת מכונה על נתוני רסטר. |
נתוני וקטורים ונתוני רסטר
נתוני וקטורים הם נקודות, קווים ופוליגונים על פני כדור הארץ. ב-BigQuery, נתוני וקטורים מאוחסנים באמצעות סוג הנתונים GEOGRAPHY. ב-Earth Engine, אלה אובייקטים מסוג ee.Geometry.
נתוני רסטר הם רשתות של פיקסלים שמוצגות בתצוגה מוקרנת. Earth Engine מותאם לטיפול ולעיבוד של מערכי נתונים גדולים מסוג רסטר.
היתרונות של שימוש בשתי המערכות
יכולת ההתאמה לעומס של BigQuery מאפשרת לכם לעבוד עם מערכי נתונים עצומים בטבלאות, שעשויים להיות קשים לעיבוד רק ב-Earth Engine. בנוסף, Earth Engine יכול לשמש להעשרה בקנה מידה גדול ולעיבוד של וקטורים לרצפים, פעולות שלא ניתן לבצע ב-BigQuery.
ב-Earth Engine יש תמיכה במגוון רחב יותר של פונקציות ונתונים גיאו-מרחביים מאשר ב-BigQuery, אבל ב-BigQuery יש שילוב עשיר יותר עם כלים ושירותים אחרים.
העברת נתונים מ-Earth Engine ל-BigQuery
אפשר לייצא נתונים מ-Earth Engine ישירות ל-BigQuery לצורך ניתוח נוסף ושילוב עם מערכי נתונים אחרים.
Export.table.toBigQuery()
אפשר להשתמש בפונקציה Export.table.toBigQuery() כדי להפעיל משימות ייצוא אסינכרוניות שמזינות את התוצאות של החישוב ב-Earth Engine ל-BigQuery. אפשר להציג את המשימות האלה ב-Earth Engine ולשלוט בהן דרך תצוגת המשימות במסוף Cloud או דרך עורך הקוד של Earth Engine.
JavaScript
// Define an Earth Engine feature collection. var features = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Export the feature collection to BigQuery. Export.table.toBigQuery({ collection: features, description: 'export_to_bigquery', table: 'my_project.my_dataset.my_table', append: true, overwrite: false });
Python
# Define an Earth Engine feature collection. features = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017') # Export the feature collection to BigQuery. task = ee.batch.Export.table.toBigQuery( collection=features, description='export_to_bigquery', table='my_project.my_dataset.my_table', append=True, overwrite=False ) task.start()
מידע נוסף זמין במסמכי התיעוד המלאים של הפונקציה.
ממשקי API סינכרוניים
אין מחבר ישיר ב-Earth Engine לכתיבה סינכרנית של נתונים ישירות ל-BigQuery. אפשר להשתמש בספריית הלקוח של BigQuery בשפה המועדפת עליכם (Python, Java, Go וכו') כדי להעביר נתונים בזמן אמת ל-BigQuery, או להשתמש ב-RPC Storage API להעברת נתונים בזמן אמת או כמעט בזמן אמת.
| נושא | פרטים |
|---|---|
| דרישות מוקדמות | צריך להפעיל את BigQuery API ואת BigQuery Storage API בפרויקט. |
| הרשאות | צריכה להיות לכם גישת כתיבה למערך הנתונים היעד ב-BigQuery והרשאה ליצור משימות בפרויקט היעד. ברשימת ההרשאות הנדרשות מפורטות ההרשאות הספציפיות. למידע מפורט על ניהול ההרשאות, אפשר לעיין במסמכי העזרה בנושא בקרת גישה ב-BigQuery. |
| תמחור | החיובים יחולו על השימוש שלכם ב-BigQuery, כולל אחסון וניתוח של כל הנתונים מ-Earth Engine שאתם מייצאים ל-BigQuery. פרטים נוספים זמינים במאמר תמחור הייצוא מ-Earth Engine ל-BigQuery. |
| מגבלות | הנתונים שמתקבלים צריכים להתאים למודל הטבלה של BigQuery, עם מגבלה נוספת של 8MB לכל שורה. כדאי לעיין גם ברשימת הבעיות המוכרות בייצוא נתונים מ-Earth Engine ל-BigQuery. |
טעינת נתונים ישירות מ-BigQuery
הפונקציה ee.FeatureCollection.loadBigQueryTable() טוענת נתונים ישירות מהטבלה ב-BigQuery בלי לבצע בהם טרנספורמציה ב-BigQuery.
JavaScript
// Load the BigQuery table with a specified geometry column. var features = ee.FeatureCollection.loadBigQueryTable({ tablePath: 'my_project.my_dataset.my_table', geometryColumn: 'geo' }); // Map features on the map Map.addLayer(features);
Python
# Load the BigQuery table with a specified geometry column. features = ee.FeatureCollection.loadBigQueryTable( tablePath='my_project.my_dataset.my_table', geometryColumn='geo') print(features.first())
| נושא | פרטים |
|---|---|
| דרישות מוקדמות | צריך להפעיל את BigQuery API ואת BigQuery Storage API בפרויקט. |
| הרשאות | בנוסף לתפקידים והרשאות רגילים, צריכה להיות לכם הרשאת קריאה בטבלת היעד ב-BigQuery והרשאה ליצור סשנים לקריאה בפרויקט היעד. ההרשאות הספציפיות הנדרשות ב-BigQuery הן: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create מידע מפורט על ניהול ההרשאות זמין במסמכי התיעוד של בקרת הגישה ב-BigQuery. |
| תמחור | אם אתם משתמשים בפרויקט שמוגדר לשימוש מסחרי ב-Earth Engine, אין עלויות נוספות ב-Earth Engine שקשורות לקריאת טבלה ב-BigQuery, אבל תחויבו בעלויות לפי זמן עיבוד נתונים (EECU) ב-Earth Engine. תוכנית התמחור המדויקת נקבעת לפי התוכנית שלכם ב-Earth Engine. אם אתם משתמשים בפרויקט שמוגדר לשימוש לא מסחרי, לא תחויבו על קריאת נתונים מ-BigQuery ל-Earth Engine. למרות שלא תשלמו על השימוש ב-BigQuery, כמוצר מסחרי, לפרויקט צריך להיות חשבון לחיוב שמשויך אליו. מידע נוסף על חשבונות לחיוב זמין במאמרים בנושא הפעלה, השבתה ושינוי של חיוב. הערה: בתצוגה המקדימה הפרטית, יכול להיות שתחויבו גם על סטרימינג של נתונים ב-BigQuery. |
| מגבלות | מסננים של אוספי תכונות נשלחים ל-BigQuery ומוחלים שם. ב-BigQuery יש מגבלה על הגודל של תנאי סינון שמתקבלים. אם מופיעה הודעת השגיאה 'המסנן גדול מדי', כדאי לפשט את המסנן. אחת מהסיבות הנפוצות לחריגה מהמגבלה הזו היא שימוש בגיאומטריה מורכבת בקריאה ל-.filterBounds() ב-Earth Engine. |
הרצת שאילתות BigQuery מ-Earth Engine
הפונקציה ee.FeatureCollection.runBigQuery() מפעילה את החישוב ב-BigQuery כדי להעריך שאילתת SQL ישירות בטבלאות BigQuery ולאחזר את התוצאות כ-FeatureCollection של Earth Engine.
JavaScript
// Construct a BigQuery query. var query = 'SELECT * FROM my_project.my_dataset.my_table WHERE area > 1000'; // Run the query and retrieve the results as a FeatureCollection. var features = ee.FeatureCollection.runBigQuery(query); // Print the first feature. print(features.first());
Python
# Construct a BigQuery query. query = 'SELECT * FROM my_project.my_dataset.my_table WHERE area > 1000' # Run the query and retrieve the results as a FeatureCollection. features = ee.FeatureCollection.runBigQuery(query) # Print the first feature. print(features.first())
עלויות
כדי להשתמש בפונקציה הזו, נדרש חשבון לחיוב.
Earth Engine
אם אתם משתמשים בפרויקט שרשום לשימוש מסחרי ב-Earth Engine, אין עלויות נוספות ב-Earth Engine שמשויכות להפעלת טבלה ב-BigQuery, אבל תחויבו בעלויות בזמן EECU שקשורות לעיבוד הנתונים ב-Earth Engine. תוכנית התמחור המדויקת נקבעת לפי תוכנית Earth Engine שלכם.
אם אתם משתמשים בפרויקט שרשום לשימוש לא מסחרי, לא תחויבו על קריאת נתונים מ-BigQuery ל-Earth Engine.
BigQuery
השיטה הזו יוצרת חיובים ב-BigQuery בהתאם לתוכנית התמחור שלכם (על פי דרישה או עם משבצות). אם יש לכם הזמנה ב-BigQuery, השימוש בשיטה הזו לא יגרום לחיוב נוסף על שימוש לפי דרישה.
| נושא | פרטים |
|---|---|
| דרישות מוקדמות | כדי להשתמש בפונקציה הזו צריך חשבון לחיוב, ו-BigQuery API צריך להיות מופעל. |
| הרשאות | מוודאים שלחשבון השירות של Earth Engine יש את ההרשאות הנדרשות לשימוש גם ב-BigQuery וגם ב-Earth Engine.
לפרטי הכניסה של המשתמש שמשמשים לאימות צריכות להיות ההרשאות bigquery.jobs.create ו-bigquery.jobs.get.
למידע מפורט על ניהול ההרשאות, אפשר לעיין במסמכי העזרה בנושא בקרת גישה ב-BigQuery. |
| תמחור | השיטה הזו יוצרת חיובים ב-BigQuery בהתאם לתוכנית התמחור שלכם (על פי דרישה או עם משבצות). אם יש לכם הזמנה ב-BigQuery, השימוש בשיטה הזו לא יגרום לחיוב נוסף על פי דרישה. אם אתם משתמשים בפרויקט שמוגדר לשימוש מסחרי ב-Earth Engine, אין עלויות נוספות ב-Earth Engine שמשויכות להרצה של טבלת BigQuery, אבל תחויבו בעלויות בזמן EECU שקשורות לעיבוד הנתונים ב-Earth Engine. תוכנית התמחור המדויקת נקבעת לפי תוכנית Earth Engine שלכם. אם אתם משתמשים בפרויקט שרשום לשימוש לא מסחרי, לא תחויבו על קריאת נתונים מ-BigQuery ל-Earth Engine. |
ביצועים
בנוסף לאופטימיזציה של שאילתות ב-BigQuery, הביצועים של החזרת התוצאות ל-Earth Engine תלויים בגודל התוצאות (כלומר, כמות הבייטים שנקראים מ-BigQuery) ובמורכבות של הגיאומטריות שנוצרות.
מסננים
שיטות מומלצות לסינון כוללות:
- סינון מוקדם ותכוף: כדאי להחיל מסננים מוקדם ככל האפשר בצינור עיבוד הנתונים, רצוי בשאילתות ה-SQL של BigQuery. כך מפחיתים את כמות הנתונים שמועברים ומעובדים על ידי Earth Engine.
- הגברת הסלקטיביות: יצירת מסננים שבוחרים קבוצת משנה קטנה וספציפית יותר של נתונים. מומלץ להימנע משימוש במסננים רחבים מדי שמאחזרים נתונים מיותרים.
- שילוב מסננים: שימוש בכמה תנאי סינון יחד כדי לצמצם את התוצאות בצורה יעילה.
- פישוט: כשהדבר אפשרי, כדאי לפרק מסננים מורכבים לתנאים פשוטים יותר כדי להימנע מחריגה מהמגבלה של 1MB על גודל מחרוזת המסנן.
- קיבוץ: שאילתות גיאו-מרחביות יכולות להניב ביצועים טובים יותר בעמודות מקובצות.
- עדיף לבצע סינון ב-BigQuery: כדי לצמצם את נפח הנתונים, תמיד עדיף לבצע סינון ראשוני ב-BigQuery לפני עיבוד נוסף ב-Earth Engine. אם אי אפשר לעשות זאת, אפשר להחיל מסננים נוספים כמסנני פוסט בסקריפט של Earth Engine אחרי טעינת הנתונים מ-BigQuery.
מגבלות ברמת המערכת
- מגבלת גודל של 400GB לטבלה
- ב-Earth Engine אי אפשר לקרוא טבלאות שגדולות מ-400GB.
- גדלים של טבלאות ביניים בנפח 10GB
- כל תוצאת שאילתה מוגבלת ל-10GB. כדי לשפר את הסלקטיביות של השאילתה, בוחרים רק את העמודות הנחוצות. לדוגמה, אפשר להוסיף תנאים מסוג
LIMITו-WHERE. - ב-Earth Engine יש מגבלה על כמות הנתונים שאפשר לסרוק ב-BigQuery.
- כל תוצאת שאילתה מוגבלת ל-10GB. כדי לשפר את הסלקטיביות של השאילתה, בוחרים רק את העמודות הנחוצות. לדוגמה, אפשר להוסיף תנאים מסוג
- מגבלה של 1MB על גודל מחרוזת המסנן אחרי הטרנספורמציה
- מסננים מורכבים עלולים לגרום למחרוזות מסנן גדולות שחורגות מהמגבלה.
- זמני תפוגה
- מערכת Earth Engine מחילה זמן קצוב לתפוגה על שאילתות, והוא עשוי להשתנות בהתאם לתחום (למשל, באצווה, אונליין).
- המגבלות של BigQuery
- למידע נוסף על המגבלות של משימות שאילתות, אפשר לעיין במסמכי התיעוד של המכסות ב-BigQuery.
אמצעי בקרה על עלויות
בדרך כלל אין עלויות ישירות בהעברת נתונים בין BigQuery ל-Earth Engine. עם זאת, גודל הנתונים המועברים יכול להשפיע על עלויות העיבוד גם ב-BigQuery וגם ב-Earth Engine.
אם שאילתה כוללת עיבוד בצד BigQuery, תחויבו ב-BigQuery בהתאם להגדרות שלכם ב-BigQuery.
אם שאילתה כוללת עיבוד ב-Earth Engine וגם הפרויקט רשום לשימוש מסחרי, תחויבו ב-Earth Engine לפי זמן EECU בהתאם להגדרות החיוב ב-Earth Engine.
יומנים וניפוי באגים
פעולות קריאה
כשקוראים נתונים מ-BigQuery באמצעות ee.FeatureCollection.loadBigQueryTable(), הפעולה המתאימה לא מתועדת באופן מפורש כמשימה ב-BigQuery. כלומר, יכול להיות שתראו פרטי רישום ביומן אחרים (כמו יומני הביקורת של Cloud) שאין להם משימות קריאה תואמות ב-BigQuery.
היסטוריית שאילתות
שאילתות שמבוצעות באמצעות ee.FeatureCollection.runBigQuery() מתועדות ביומן השאילתות של הפרויקט ב-BigQuery. אפשר לגשת להיסטוריית השאילתות דרך ממשק המשתמש של BigQuery במסוף Cloud.