מריצה שאילתת צבירה.
במקום להניב תוצאות מסוג Document
כמו Firestore.RunQuery
, ה-API הזה מאפשר להריץ נתוני צבירה כדי לייצר סדרה של AggregationResult
בצד השרת.
דוגמה לרמה גבוהה:
-- Return the number of documents in table given a filter.
SELECT COUNT(*) FROM ( SELECT * FROM k where a = true );
בקשת HTTP
POST https://firestore.googleapis.com/v1/{parent=projects/*/databases/*/documents}:runAggregationQuery
בכתובת ה-URL נעשה שימוש בתחביר המרת קידוד של gRPC.
פרמטרים של נתיב
פרמטרים | |
---|---|
parent |
חובה. השם של משאב ההורה. בפורמט: |
גוף הבקשה
גוף הבקשה מכיל נתונים במבנה הבא:
ייצוג JSON |
---|
{ "explainOptions": { object ( |
שדות | |
---|---|
explainOptions |
זה שינוי אופציונלי. להסביר את האפשרויות של השאילתה. אם היא מוגדרת, יוחזרו נתונים סטטיסטיים נוספים של השאילתה. אם לא, יוחזרו רק תוצאות השאילתה. |
שדה איחוד query_type . השאילתה להרצה. query_type יכול להיות רק אחד מהבאים: |
|
structuredAggregationQuery |
שאילתת צבירה. |
שדה איחוד consistency_selector . במצב העקביות של השאילתה, ברירת המחדל היא עקביות חזקה. consistency_selector יכול להיות רק אחד מהבאים: |
|
transaction |
הפעל את הצבירה בתוך עסקה שכבר פעילה. הערך כאן הוא מזהה העסקה השקוף שבו צריך לבצע את השאילתה. מחרוזת בקידוד base64. |
newTransaction |
מפעיל עסקה חדשה כחלק מהשאילתה, וברירת המחדל היא לקריאה בלבד. מזהה העסקה החדש יוחזר כתגובה הראשונה בשידור. |
readTime |
מפעיל את השאילתה בחותמת הזמן הנתונה. זו צריכה להיות חותמת זמן ברמת דיוק של מיקרו-שנייה בשעה האחרונה. אם האפשרות 'שחזור נקודת זמן' מופעלת, היא יכולה להיות גם חותמת זמן של דקה שלמה מ-7 הימים האחרונים. חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
גוף התשובה
התשובה עבור Firestore.RunAggregationQuery
.
אם הפעולה בוצעה ללא שגיאות, גוף התשובה מכיל נתונים במבנה הבא:
ייצוג JSON |
---|
{ "result": { object ( |
שדות | |
---|---|
result |
תוצאת צבירה אחת. לא קיים בדיווח על התקדמות חלקית. |
transaction |
העסקה שהתחילה כחלק מהבקשה הזו. מוצג רק בתגובה הראשונה כשנשלחה בקשה להתחלת עסקה חדשה. מחרוזת בקידוד base64. |
readTime |
המועד שבו חושבה התוצאה המצטברת. הערך הזה תמיד גדל באופן מונוטוני. במקרה הזה, מובטח שתוצאת הצבירה הקודמת בזרם התוצאות לא תשתנה בין אם השאילתה לא מחזירה תוצאות, תישלח תשובה עם חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
explainMetrics |
הסבר על מדדים בשאילתה. הערך הזה מוצג רק כאשר ה- |
היקפי הרשאות
נדרש אחד מהיקפי ההרשאות הבאים של OAuth:
https://www.googleapis.com/auth/datastore
https://www.googleapis.com/auth/cloud-platform
מידע נוסף זמין בסקירה הכללית על אימות.
StructuredAggregationQuery
שאילתה ב-Firestore להפעלת צבירה ב-StructuredQuery
.
ייצוג JSON |
---|
{ "aggregations": [ { object ( |
שדות | |
---|---|
aggregations[] |
זה שינוי אופציונלי. סדרת הצבירה שיחולו על התוצאות של אלה הדרישות שצריך לעמוד בהן:
|
שדה איחוד query_type . השאילתה הבסיסית לצבירה. query_type יכול להיות רק אחד מהבאים: |
|
structuredQuery |
שאילתה מובנית בתוך שאילתה. |
צבירה
מגדירה צבירה שיוצרת תוצאה אחת.
ייצוג JSON |
---|
{ "alias": string, // Union field |
שדות | |
---|---|
alias |
זה שינוי אופציונלי. שם אופציונלי של השדה שבו יישמרו תוצאת הצבירה. אם לא תספקו שם, Firestore תבחר שם ברירת מחדל בפורמט
הופך ל:
אלה הדרישות שצריך לעמוד בהן:
|
שדה איחוד operator . סוג הצבירה לבצע, נדרש. operator יכול להיות רק אחד מהבאים: |
|
count |
אתר אגרגטור של ספירות. |
sum |
צובר סכומים. |
avg |
אתר אגרגטור ממוצע. |
מספר פעמים
ספירת המסמכים שתואמים לשאילתה.
פונקציית הצבירה COUNT(*)
פועלת על כל המסמך ולכן לא נדרשת הפניה לשדה.
ייצוג JSON |
---|
{ "upTo": string } |
שדות | |
---|---|
upTo |
זה שינוי אופציונלי. מגבלה אופציונלית על המספר המקסימלי של מסמכים לספירה. כך אפשר להגדיר גבול עליון למספר המסמכים לסריקה, להגבלת זמן האחזור והעלות. המשמעות של 'לא צוין' היא 'ללא הגבלה'. דוגמה לרמה גבוהה:
אלה הדרישות שצריך לעמוד בהן:
|
סכום
סכום הערכים של השדה המבוקש.
רק ערכים מספריים יצטברו. המערכת תדלג על כל הערכים הלא מספריים, כולל
NULL
.אם הערכים המצטברים מכילים
NaN
, הפונקציה מחזירהNaN
. מתמטית אינסופית עומדת בתקני IEEE-754.אם קבוצת הערכים הנצברים היא ריקה, הפונקציה מחזירה 0.
מחזירה מספר שלם של 64 סיביות אם כל המספרים המצטברים הם מספרים שלמים והתוצאה הסופית לא גולשת. אחרת, התוצאה תוחזר ככפולה. שימו לב שגם אם כל הערכים המצטברים הם מספרים שלמים, התוצאה מוחזרת ככפולה אם היא לא יכולה להתאים בתוך מספר שלם חתום של 64 ביט. במקרה כזה, הערך שיוחזר יאבד את הדיוק.
במקרה של תת-זרימה, צבירת נתונים בנקודה צפה (floating-point) אינה דטרמיניסטית. המשמעות היא שאם תריץ את אותה שאילתה שוב ושוב ללא שינויים בערכים הבסיסיים, תוכל להפיק תוצאות מעט שונות בכל פעם. במקרים כאלה, צריך לאחסן את הערכים כמספרים שלמים מעל למספרים עם נקודה צפה (floating-point).
ייצוג JSON |
---|
{
"field": {
object ( |
שדות | |
---|---|
field |
השדה שבו תתבצע צבירה. |
Avg
ממוצע הערכים של השדה המבוקש.
רק ערכים מספריים יצטברו. המערכת תדלג על כל הערכים הלא מספריים, כולל
NULL
.אם הערכים המצטברים מכילים
NaN
, הפונקציה מחזירהNaN
. מתמטית אינסופית עומדת בתקני IEEE-754.אם קבוצת הערכים הנצברים ריקה, הפונקציה מחזירה
NULL
.מחזירה תמיד את התוצאה כ-double.
ייצוג JSON |
---|
{
"field": {
object ( |
שדות | |
---|---|
field |
השדה שבו תתבצע צבירה. |
AggregationResult
התוצאה של קטגוריה יחידה משאילתת צבירה של Firestore.
המפתחות של aggregateFields
זהים לכל התוצאות בשאילתת צבירה, בניגוד לשאילתות מסמכים שבהן יכולים להיות שדות שונים לכל תוצאה.
ייצוג JSON |
---|
{
"aggregateFields": {
string: {
object ( |
שדות | |
---|---|
aggregateFields |
התוצאה של פונקציות הצבירה, לדוגמה: המפתח הוא אובייקט שמכיל רשימה של |