تحويل بياناتك الضخمة إلى إحصاءات باستخدام "جداول بيانات Google" و"العروض التقديمية من Google"

تتوفّر العديد من الأدوات لعلماء البيانات لإجراء تحليلات البيانات الضخمة، ولكن في نهاية المطاف، ألا يزال عليك تبرير هذه النتائج للإدارة؟ لا يمكن تقديم الكثير من الأرقام على الورق أو في قاعدة البيانات إلى أصحاب المصلحة الرئيسيين. يستفيد هذا الدرس العملي المتوسط المستوى حول Google Apps Script من منصّتَي تطوير من Google، وهما G Suite وGoogle Cloud Platform (GCP)، لمساعدتك في إكمال هذه الخطوة الأخيرة.

تتيح لك أدوات المطوّرين في Google Cloud إجراء تحليل دقيق للبيانات، ثم أخذ هذه النتائج ووضعها في جدول بيانات وإنشاء عرض تقديمي باستخدام هذه البيانات، ما يوفّر مرحلة أكثر ملاءمة لتقديم النتائج إلى الإدارة. يتناول هذا الدرس العملي واجهة برمجة التطبيقات BigQuery من Google Cloud Platform (كـ خدمة متقدّمة في "برمجة تطبيقات Google") وخدمات "برمجة تطبيقات Google" المضمّنة في جداول بيانات Google والعروض التقديمية من Google.

الدافع/المعلومات المتعلّقة بالاختراع السابق

تم استلهام تطبيق العيّنة في هذا الدرس العملي من نماذج الرموز البرمجية الأخرى هذه...

على الرغم من أنّ تطبيق العيّنة في درس Slides API التطبيقي يتضمّن أيضًا BigQuery وSlides، إلا أنّه يختلف عن تطبيق العيّنة في هذا الدرس التطبيقي بعدّة طرق:

  • تطبيق Node.js مقارنةً بتطبيق "برمجة التطبيقات"
  • استخدام واجهات REST API أثناء استخدام خدمات "برمجة تطبيقات Google"
  • يستخدم Google Drive ولكن ليس "جداول بيانات Google"، بينما يستخدم هذا التطبيق "جداول بيانات Google" ولكن ليس Drive

في هذا الدرس البرمجي، أردنا جمع أكبر قدر ممكن من التكنولوجيات في تطبيق واحد مع عرض الميزات وواجهات برمجة التطبيقات من جميع أنحاء Google Cloud بطريقة تشبه إلى حد كبير حالة الاستخدام الواقعية. الهدف هو إلهامك لاستخدام خيالك والتفكير في الاستفادة من كلّ من Google Cloud Platform وG Suite لحلّ المشاكل الصعبة التي تواجه مؤسستك أو عملائك.

أهداف الدورة التعليمية

  • كيفية استخدام "برمجة تطبيقات Google" مع خدمات Google المتعددة (GCP وG Suite)
  • كيفية استخدام Google BigQuery لإجراء تحليل للبيانات الكبيرة
  • كيفية إنشاء جدول بيانات Google وتعبئته بالبيانات
  • كيفية إنشاء رسم بياني جديد في "جداول بيانات Google"
  • كيفية نقل الرسومات البيانية والبيانات من "جداول بيانات Google" إلى عرض تقديمي في "العروض التقديمية من Google"

المتطلبات

  • إمكانية الوصول إلى الإنترنت ومتصفّح ويب
  • حساب Google (قد تتطلّب حسابات G Suite موافقة المشرف)
  • مهارات JavaScript الأساسية
  • قد يكون الإلمام بتطوير "برمجة التطبيقات" مفيدًا ولكنّه ليس ضروريًا

كيف ستستخدم هذا الدرس العملي أو البرنامج التعليمي؟

قراءته لأغراض إعلامية، وربما مشاركته مع الزملاء الفنيين قراءته قدر الإمكان وتجربة أكبر عدد ممكن من التمارين سأكمل كل خطوة في هذا الدرس التطبيقي

ما هو تقييمك لتجربتك مع أدوات وميزات G Suite المخصّصة للمطوّرين؟

مبتدئ متوسط متقن

كيف تقيّم تجربتك مع Apps Script تحديدًا؟

مبتدئ متوسط متقن

ما هو تقييمك لتجربتك مع أدوات المطوّرين وواجهات برمجة التطبيقات في "منصة Google Cloud"؟

مبتدئ متوسط متقدّم

بعد أن عرفت موضوع هذا الدرس العملي، ما الذي ستفعله بالضبط؟

  1. استخدام نموذج حالي من "برمجة تطبيقات Google" وBigQuery وتفعيله
  2. من هذا النموذج، تعرَّف على كيفية إرسال طلب بحث إلى BigQuery والحصول على نتائجه
  3. إنشاء جدول بيانات Google وتعبئته بالنتائج من BigQuery
  4. عدِّل الرمز قليلاً لتغيير البيانات التي يتم عرضها وإضافتها إلى جدول البيانات
  5. استخدِم خدمة "جداول بيانات Google" في Apps Script لإنشاء رسم بياني للبيانات من BigQuery
  6. استخدام خدمة "العروض التقديمية من Google" لإنشاء عرض تقديمي جديد
  7. إضافة عنوان وعنوان فرعي إلى شريحة العنوان التلقائية التي يتم إنشاؤها تلقائيًا لجميع عروض الشرائح الجديدة
  8. إنشاء شريحة جديدة تحتوي على جدول بيانات، ثم استيراد خلايا بيانات "جداول بيانات Google" إلى الشريحة
  9. أضِف شريحة جديدة أخرى وأضِف إليها الرسم البياني لجدول البيانات

لنبدأ ببعض المعلومات الأساسية عن "برمجة تطبيقات Google" وBigQuery و"جداول بيانات Google" و"العروض التقديمية من Google".

‫Google Apps Script وBigQuery

برمجة تطبيقات Google هي منصة تطوير في G Suite تعمل بمستوى أعلى من استخدام واجهات Google REST API. وهي بيئة تطوير واستضافة تطبيقات بدون خادم يمكن أن يستفيد منها مجموعة كبيرة من المطوّرين بمختلف مستويات المهارة. في جملة واحدة، "برمجة تطبيقات Google هي بيئة وقت تشغيل JavaScript بدون خادم لإدارة G Suite تلقائيًا وتوسيعها ودمجها".

وهي لغة JavaScript من جهة الخادم، وهي مشابهة لـ Node.js، ولكنها تركّز على التكامل الوثيق مع G Suite وخدمات Google الأخرى بدلاً من استضافة التطبيقات السريعة غير المتزامنة المستندة إلى الأحداث. كما تتضمّن بيئة تطوير قد تختلف تمامًا عن البيئة التي اعتدت عليها. باستخدام "برمجة تطبيقات Google"، يمكنك إجراء ما يلي:

  • يمكنك التطوير في أداة تعديل الرموز المستندة إلى المتصفح، ولكن يمكنك اختيار التطوير محليًا في حال استخدام clasp، وهي أداة نشر سطر الأوامر في "برمجة تطبيقات Google".
  • كتابة الرموز في إصدار متخصص من JavaScript مخصّص للوصول إلى G Suite والخدمات الأخرى من Google أو الخدمات الخارجية (من خلال خدمات URLfetch أو Jdbc في "برمجة تطبيقات Google")
  • يمكنك تجنُّب كتابة رمز التفويض لأنّ "برمجة التطبيقات" تتولّى ذلك نيابةً عنك
  • لست بحاجة إلى استضافة تطبيقك، فهو يعمل على خوادم Google في السحابة الإلكترونية

ملاحظة: لا يهدف هذا الدرس العملي إلى تعليمك كيفية استخدام "برمجة تطبيقات Google". هناك الكثير من المراجع المتاحة على الإنترنت لمساعدتك في ذلك. تتضمّن المستندات الرسمية أيضًا نظرة عامة مع أدلة بدء الاستخدام السريع وبرامج تعليمية وفيديوهات. وأخيرًا، لا تنسَ الدرس العملي التمهيدي حول Apps Script الذي يجب إكماله قبل البدء في هذا الدرس.

تتفاعل "برمجة تطبيقات Google" مع تكنولوجيات Google الأخرى بطريقتَين مختلفتَين:

  • خدمة مدمَجة/أصلية
  • الخدمة المتقدّمة

توفّر الخدمة المضمّنة طرقًا عالية المستوى يمكنك استخدامها للوصول إلى بيانات G Suite أو منتجات Google أو طرق أخرى مفيدة. الخدمة المتقدّمة هي مجرد غلاف رقيق حول واجهة برمجة تطبيقات REST في G Suite أو Google. توفّر الخدمات المتقدّمة تغطية كاملة لواجهة REST API ويمكنها غالبًا تنفيذ مهام أكثر من الخدمات المضمّنة، ولكنها تتطلّب المزيد من تعقيد الرموز البرمجية (مع أنّها تظل أسهل في الاستخدام من واجهة REST API نفسها). يجب أيضًا تفعيل الخدمات المتقدّمة لمشروع نص برمجي قبل استخدامها.

عند الإمكان، يجب أن يفضّل المطوّرون استخدام خدمة مضمّنة لأنّها أسهل في الاستخدام وتنفّذ مهامًا أكثر تعقيدًا من الخدمات المتقدّمة. ومع ذلك، لا تتضمّن بعض واجهات Google APIs خدمات مضمّنة، لذا قد تكون الخدمة المتقدّمة هي الخيار الوحيد. Google BigQuery هو أحد الأمثلة على ذلك... لا تتوفّر خدمة مضمّنة، ولكن تتوفّر خدمة BigQuery المتقدّمة بالفعل. (أليس هذا أفضل من عدم توفّر الخدمة؟) إذا كنت لا تعرف BigQuery، هي خدمة من خدمات Google Cloud Platform تتيح لك تنفيذ طلبات بحث بسيطة (أو معقّدة) على مجموعات كبيرة جدًا من البيانات، مثلاً بترتيب عدة تيرابايت، ولكنها لا تزال قادرة على تقديم النتائج في ثوانٍ.

الوصول إلى "جداول بيانات Google" و"العروض التقديمية من Google" من خلال "برمجة تطبيقات Google"

على عكس BigQuery، تتضمّن كلّ من "جداول بيانات Google" و"العروض التقديمية من Google" خدمات مدمجة (بالإضافة إلى الخدمات المتقدّمة التي لا يمكنك استخدامها إلا للوصول إلى الميزات المتوفّرة في واجهة برمجة التطبيقات فقط). يُرجى الاطّلاع على المستندات الخاصة بكل من خدمتي جداول بيانات Google والعروض التقديمية من Google المضمّنتين قبل الانتقال إلى الرمز. بالطبع، تتوفّر أيضًا مستندات للخدمات المتقدّمة، ويمكنك الاطّلاع عليها هنا لكل من جداول بيانات Google والعروض التقديمية من Google.

مقدمة

سنبدأ هذه التجربة العملية بهذه المهمة الأولى. في الواقع، بعد الانتهاء من هذا القسم، ستكون قد أتممت نصف مهمة هذا الدرس العملي. سيتم تقسيم هذه الدورة التدريبية إلى عدة أقسام فرعية، وستنفّذ فيها ما يلي:

  • بدء مشروع جديد في "برمجة تطبيقات Google"
  • تفعيل الوصول إلى خدمة BigQuery المتقدّمة
  • انتقِل إلى "أداة تعديل التطبيقات" وأدخِل رمز مصدر التطبيق
  • اتّبِع خطوات تفويض التطبيق (OAuth2)
  • تشغيل التطبيق الذي يرسل طلبًا إلى BigQuery
  • عرض جدول بيانات Google جديد تم إنشاؤه باستخدام النتائج من BigQuery

ضبط إعدادات الجهاز

  1. أ) أنشئ مشروعًا جديدًا في "برمجة تطبيقات Google" من خلال الانتقال إلى script.google.com . تتوفّر مجموعات منتجات مختلفة من G Suite، وقد تختلف طريقة إنشاء مشروع جديد حسب الإصدار الذي تستخدمه. إذا كنت تستخدم حسابك على Gmail فقط وكنت جديدًا في تطوير المشاريع، ستظهر لك شاشة فارغة مع زر لإنشاء مشروعك الأول:


ب) بخلاف ذلك، قد تظهر لك كل مشاريعك وزر كبير +جديد في أعلى يمين الشاشة، لذا انقر عليه.



ج) إذا لم يحدث أيّ مما سبق، قد تبدو شاشتك كما يلي. إذا كان الأمر كذلك، ابحث عن رمز قائمة الهمبرغر في أعلى يمين الصفحة وانقر على +New script.



د) بالنسبة إلى المستخدمين الذين يفضّلون استخدام سطر الأوامر. أداةك هي clasp، وتحديدًا، ستنفّذ الأمر clasp create.

هـ) الطريقة الأخيرة لإنشاء مشروع نص برمجي جديد هي الانتقال ببساطة إلى رابط الاختصار: https://script.google.com/create.

  1. بغض النظر عن الأسلوب الذي استخدمته لبدء مشروع جديد، النتيجة النهائية هي أنّه سيتم نقلك إلى أداة تعديل رموز برمجة التطبيقات، وهي شاشة تبدو على النحو التالي:


  2. انقر على ملف > حفظ وأدخِل اسمًا لمشروعك.
  3. بعد ذلك، عليك إنشاء مشروع في Google Cloud Console لتنفيذ طلبات بحث BigQuery.
  1. أنشئ مشروعًا جديدًا، وأدخِل اسمًا له، واختَر حساب فوترة، ثم انقر على إنشاء.
  1. عند اكتمال عملية إنشاء المشروع، سيظهر إشعار في أعلى يسار الصفحة. انقر على الإدخال إنشاء مشروع: <اسم المشروع> لفتح المشروع.
  2. انقر على رمز القائمة في أعلى يمين الصفحة وانتقِل إلى واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد. انقر على علامة التبويب شاشة موافقة OAuth (رابط مباشر).
  3. في الحقل اسم التطبيق، أدخِل Big Data Codelab وانقر على الزر حفظ في أسفل الصفحة.
  4. انقر على رمز النقاط الثلاثفي أعلى يسار الصفحة لتوسيع القائمة واختَر إعدادات المشروع (رابط مباشر).
  5. انسخ القيمة المُدرَجة ضمن رقم المشروع. (هناك حقل منفصل باسم معرّف المنتج سنستخدمه لاحقًا في هذا الدرس العملي).
  6. في "محرِّر نصوص App Script"، انقر على المراجع > مشروع Cloud Platform.
  7. أدخِل رقم المشروع في مربّع النص وانقر على ضبط المشروع. انقر على تأكيد عندما يُطلب منك ذلك.
  8. عند اكتمال العملية، انقر على الزر إغلاق لإغلاق مربّع الحوار.
  9. بعد إعداد مشروع جديد، عليك تفعيل خدمة BigQuery المتقدّمة، لذا انقر على الموارد (Resources) -> خدمات Google المتقدّمة (Advanced Google Services) وفعِّل الخيار BigQuery API.


  10. تتضمّن الملاحظة في أسفل الصفحة ما يلي: "يجب أيضًا تفعيل هذه الخدمات في "لوحة بيانات واجهة برمجة التطبيقات في Google Cloud Platform"، لذا انقر على هذا الرابط الذي يفتح علامة تبويب أخرى في المتصفّح إلى "وحدة تحكّم المطوّرين" أو "devconsole" باختصار.
  11. في devconsole، انقر على الزر +Enable APIs and Services (+ تفعيل واجهات برمجة التطبيقات والخدمات) في أعلى الصفحة، وابحث عن "bigquery"، واختَر BigQuery API (وليس BigQuery Data Transfer API)، ثم انقر على تفعيل (enable) لتفعيلها. اترك علامة تبويب المتصفّح هذه مفتوحة.

    ملاحظة: بعد تفعيل واجهة برمجة التطبيقات، قد تظهر لك ملاحظة على هذه الصفحة تقول مثلاً: "لاستخدام واجهة برمجة التطبيقات هذه، عليك إنشاء بيانات اعتماد..."، ولكن لا داعي للقلق بشأن ذلك في الوقت الحالي، إذ ستتولّى "برمجة التطبيقات" هذه الخطوة نيابةً عنك.


  12. في علامة تبويب متصفّح محرّر الرموز، ستظلّ في قائمة "خدمات Google المتقدّمة"، لذا انقر على حسنًا لإغلاق مربّع الحوار، ما سيؤدي إلى إبقائك في محرّر الرموز. انقر على اسم المشروع في أعلى الصفحة، وأطلِق عليه أي اسم تريده، مثل "عرض توضيحي لـ BigQuery" أو ما شابه ذلك، وقد أطلقنا على مشروعنا اسم "المرحلة الأخيرة".

أنت الآن مستعد لإدخال رمز التطبيق وإكمال عملية التفويض وتشغيل الإصدار الأول من هذا التطبيق.

تحميل التطبيق وتشغيله

  1. انسخ الرمز في المربّع أدناه وألصِقه فوق كل المحتوى في أداة تعديل الرموز:
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into Sheet. You must enable
 * the BigQuery advanced service before you can run this code.
 * @see http://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
 */
function runQuery() {
  // Replace sample with your own BigQuery query.
  var request = {
    query:
        'SELECT ' +
            'LOWER(word) AS word, ' +
            'SUM(word_count) AS count ' +
        'FROM [bigquery-public-data:samples.shakespeare] ' +
        'GROUP BY word ' +
        'ORDER BY count ' +
        'DESC LIMIT 10'
  };
  var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
  var jobId = queryResults.jobReference.jobId;

  // Wait for BQ job completion (with exponential backoff).
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
  }

  // Get all results from BigQuery.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  // Return null if no data returned.
  if (!rows) {
    return Logger.log('No rows returned.');
  }

  // Create the new results spreadsheet.
  var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
  var sheet = spreadsheet.getActiveSheet();

  // Add headers to Sheet.
  var headers = queryResults.schema.fields.map(function(field) {
    return field.name.toUpperCase();
  });
  sheet.appendRow(headers);

  // Append the results.
  var data = new Array(rows.length);
  for (var i = 0; i < rows.length; i++) {
    var cols = rows[i].f;
    data[i] = new Array(cols.length);
    for (var j = 0; j < cols.length; j++) {
      data[i][j] = cols[j].v;
    }
  }

  // Start storing data in row 2, col 1
  var START_ROW = 2;      // skip header row
  var START_COL = 1;
  sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);

  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
}


احفظ الآن الملف الذي أنشأته للتو، ولكن أعِد تسميته من Code.gs إلى bq-sheets-slides.js. إذًا، ما هي وظيفة هذه التعليمة البرمجية؟ لقد أخبرناك سابقًا بأنّها تستعلم عن BigQuery وتكتب النتائج في جدول بيانات Google جديد، ولكن ما هو طلب البحث هذا؟ يمكنك الاطّلاع عليه بالقرب من أعلى الصفحة runQuery():

SELECT
    LOWER(word) AS word,
    SUM(word_count) AS count
FROM [bigquery-public-data:samples.shakespeare]
GROUP BY word
ORDER BY count
DESC LIMIT 10


يبحث طلب البحث هذا في أعمال شكسبير، وهي جزء من مجموعة البيانات العامة في BigQuery، ويعرض أهم 10 كلمات تظهر بشكل متكرر في جميع أعماله، ويتم ترتيبها بترتيب تنازلي حسب الرواج. تخيَّل مدى صعوبة تنفيذ ذلك يدويًا، وستدرك مدى فائدة BigQuery.

  1. نحن على وشك الانتهاء من هذه الميزة، ولكنّها ليست جاهزة بعد. كما ترى بالقرب من أعلى مقتطف الرمز هذا، يجب توفير معرّف مشروع صالح، لذا علينا إضافة معرّف مشروعك إلى رمز التطبيق. للحصول على ذلك، ارجع إلى نافذة المتصفّح أو علامة التبويب التي تحتوي على صفحة "وحدة تحكّم المطوّر". (لقد طلبنا منك إبقاءه مفتوحًا، هل تتذكّر؟)
  2. في أعلى يسار صورة الأفاتار الخاصة بحسابك على Google، يظهر زر القائمة المنسدلة (). انقر عليه واختَر إعدادات المشروع. سيظهر لك اسم المشروع ورقم تعريفه ورقم الإصدار. انسخ رقم تعريف المشروع واضبط المتغيّر PROJECT_ID في أعلى bq-sheets-slides.js على القيمة التي حصلت عليها من "وحدة تحكّم المطوّرين". ملاحظة: إذا أصبح أداة اختيار القائمة ثابتة وغير قابلة للتشغيل، أعِد تحميل الصفحة.
  3. يتم استخدام عبارة if لمنع التطبيق من المتابعة بدون توفّر رقم تعريف مشروع. بعد إضافة بياناتك، احفظ الملف وشغِّل الرمز البرمجي من خلال الانتقال إلى شريط القوائم واختيار تشغيل > تشغيل الدالة > runQuery، ثم انقر على مربّع الحوار مراجعة الأذونات، ثم على "لم يتم التحقّق من هذا التطبيق". في ما يلي صورة GIF متحركة (لتطبيق آخر) توضّح الخطوات القليلة التالية:
  4. بعد طلب مراجعة الأذونات، سيظهر لك مربّع حوار جديد، كما هو موضّح أعلاه. اختَر حساب Google الصحيح الذي سيشغّل النص البرمجي، ثم انقر على خيارات متقدمة، وانتقِل للأسفل، ثم انقر على "الانتقال إلى <اسم مشروعك> (غير آمن)" للوصول إلى شاشة تفويض تطبيق OAuth2. (يمكنك الاطّلاع على مزيد من المعلومات حول عملية التحقّق لمعرفة سبب ظهور هذه الشاشة بينك وبين مربّع حوار تفويض OAuth2 أدناه.)


    ملاحظة: بعد تفويض التطبيق، لن تحتاج إلى تكرار هذه العملية مع كل عملية تنفيذ. لن يظهر لك مربع الحوار هذا مرة أخرى إلا في المهمة 3 في وقت لاحق من هذا البرنامج التعليمي، حيث سيطلب منك منح المستخدم الإذن بإنشاء عروض تقديمية في "العروض التقديمية من Google" وإدارتها.
  5. بعد النقر على السماح في مربّع حوار OAuth2، يبدأ تنفيذ البرنامج النصي... سيظهر لك مربّع حوار أصفر فاتح في الأعلى. يتم تشغيلها بسرعة إلى حدّ ما، لذا قد لا تلاحظ أنّها قيد التشغيل أو أنّ التنفيذ قد اكتمل.

  6. سيختفي مربّع الحوار هذا بعد اكتمال العملية، لذا إذا لم يظهر لك، من المحتمل أن تكون العملية قد انتهت، لذا انتقِل إلى Google Drive (drive.google.com) وابحث عن جدول بيانات Google جديد باسم "الكلمات الأكثر شيوعًا في جميع أعمال شكسبير" أو أي اسم آخر خصّصته للمتغيّر QUERY_NAME:


  7. افتح جدول البيانات، وسيظهر لك 10 صفوف من الكلمات وإجمالي عدد مرات ظهورها مرتّبةً ترتيبًا تنازليًا:

ملخّص المهمة 1

أدرِك ما حدث للتو... لقد شغّلت بعض الرموز التي استعلمت عن كل أعمال شكسبير (ليس قدرًا هائلاً من البيانات، ولكن بالتأكيد نص أكثر مما يمكنك فحصه بسهولة بنفسك من خلال النظر إلى كل كلمة في كل مسرحية، وإدارة عدد هذه الكلمات، ثم ترتيبها بترتيب تنازلي حسب عدد مرات ظهورها. لم تطلب من BigQuery إجراء ذلك نيابةً عنك فحسب، بل تمكّنت أيضًا من استخدام الخدمة المضمّنة في Apps Script لـ "جداول بيانات Google" من أجل وضع هذه البيانات فيها لتسهيل استخدامها.

يمكنك أيضًا العثور على الرمز الخاص بـ bq-sheets-slides.js (اسم الملف الذي اخترناه) الذي لصقته أعلاه (باستثناء PROJECT_ID الذي يجب أن يتضمّن رقم تعريف مشروع حقيقي) في المجلد step1 في مستودع GitHub الخاص بهذا الدرس العملي على الرابط github.com/googlecodelabs/bigquery-sheets-slides. استند الرمز إلى المثال الأصلي في صفحة "الخدمات المتقدّمة" في BigQuery الذي نفّذ طلب بحث مختلفًا قليلاً... ما هي الكلمات الأكثر شيوعًا التي استخدمها شكسبير والتي تتضمّن 10 أحرف أو أكثر؟ يمكنك أيضًا الاطّلاع على هذا النموذج في مستودع GitHub.

إذا كنت مهتمًا باستكشاف طلبات بحث أخرى يمكنك تجربتها على أعمال شكسبير أو جداول البيانات العامة الأخرى، يمكنك الاطّلاع على صفحة الويب هذه بالإضافة إلى هذه الصفحة. بغض النظر عن طلب البحث الذي تستخدمه، يمكنك دائمًا اختباره في وحدة تحكّم BigQuery قبل تنفيذه في "برمجة تطبيقات Google". تتوفّر واجهة مستخدم BigQuery للمطوّرين على bigquery.cloud.google.com. على سبيل المثال، إليك شكل طلب البحث باستخدام واجهة مستخدم BigQuery:

على الرغم من أنّ الخطوات المذكورة أعلاه تستخدم محرّر الرموز البرمجية في "برمجة تطبيقات Google"، يمكنك أيضًا اختيار التطوير محليًا من خلال سطر الأوامر. إذا كنت تفضّل ذلك، أنشئ نصًا برمجيًا باسم bq-sheets-slides.js، وألصِق الرمز أعلاه فيه، ثم حمِّله إلى Google باستخدام الأمر clasp push. (إذا فاتك الرابط في وقت سابق، إليك مرة أخرى رابط clasp وكيفية استخدامه).

الغرض من runQuery() هو التحدّث إلى BigQuery وإرسال النتائج إلى "جدول بيانات". الآن، علينا إنشاء رسم بياني باستخدام البيانات. لننشئ دالة جديدة باسم createColumnChart() تستدعي طريقة newChart() في ورقة البيانات لتنفيذ ذلك.

  1. إنشاء رسم بياني أضِف نص createColumnChart() المميز أدناه إلى bq-sheets-slides.js مباشرةً بعد runQuery(). يحصل على ورقة تحتوي على بيانات ويطلب إنشاء مخطط عمودي يتضمّن كل البيانات. يبدأ نطاق البيانات في الخلية A2 لأنّ الصف الأول يحتوي على عناوين الأعمدة وليس البيانات.
/**
 * Uses spreadsheet data to create columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} visualizing the results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first and only) Sheet.
  var sheet = spreadsheet.getSheets()[0];
  // Data range in Sheet is from cell A2 to B11
  var START_CELL = 'A2';  // skip header row
  var END_CELL = 'B11';
  // Place chart on Sheet starting on cell E5.
  var START_ROW = 5;      // row 5
  var START_COL = 5;      // col E
  var OFFSET = 0;

  // Create & place chart on the Sheet using above params.
  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.COLUMN)
     .addRange(sheet.getRange(START_CELL + ':' + END_CELL))
     .setPosition(START_ROW, START_COL, OFFSET, OFFSET)
     .build();
  sheet.insertChart(chart);
}
  1. جدول بيانات العائد: في المثال أعلاه، تحتاج الدالة createColumnChart() إلى عنصر جدول البيانات، لذا علينا تعديل الدالة runQuery() لعرض العنصر spreadsheet حتى نتمكّن من تمريره إلى الدالة createColumnChart(). بعد تسجيل عملية إنشاء "جدول بيانات Google" بنجاح، أعِد كائن spreadsheet في نهاية runQuery()، مباشرةً بعد سطر السجلّ:
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());

  // NEW: Return the spreadsheet object for later use.
  return spreadsheet;
}
  1. وظيفة القيادة createBigQueryPresentation() إنّ الفصل المنطقي بين وظيفتَي BigQuery وإنشاء الرسوم البيانية هو فكرة رائعة. لننشئ الآن دالة createBigQueryPresentation() لتشغيل التطبيق، مع استدعاء كلّ من runQuery() وcreateColumnChart(). من المفترض أن يبدو الرمز الذي تضيفه على النحو التالي:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  createColumnChart(spreadsheet);
}
  1. إتاحة إعادة استخدام الرمز: لقد اتّخذت خطوتَين مهمتَين أعلاه: عرض عنصر جدول البيانات وإنشاء دالة رئيسية. ماذا لو أراد أحد الزملاء إعادة استخدام runQuery() ولا يريد تسجيل عنوان URL؟ لجعل runQuery() أكثر سهولة في الاستخدام العام، علينا نقل سطر السجلّ هذا. ما هو أفضل مكان لنقلها؟ إذا خمّنت createBigQueryPresentation()، ستكون إجابتك صحيحة. بعد نقل سطر السجلّ، من المفترض أن يظهر على النحو التالي:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
  createColumnChart(spreadsheet);
}

بعد إجراء هذه التغييرات أعلاه (باستثناء PROJECT_ID)، من المفترض أن يبدو bq-sheets-slides.js على النحو التالي (ويمكن العثور عليه أيضًا في المجلد step2 في مستودع GitHub):

// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into Sheet. You must enable
 * the BigQuery advanced service before you can run this code.
 * @see http://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
 *
 * @returns {Sheet} Returns a sheet with results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/sheet
 */
function runQuery() {
  // Replace sample with your own BigQuery query.
  var request = {
    query:
        'SELECT ' +
            'LOWER(word) AS word, ' +
            'SUM(word_count) AS count ' +
        'FROM [bigquery-public-data:samples.shakespeare] ' +
        'GROUP BY word ' +
        'ORDER BY count ' +
        'DESC LIMIT 10'
  };
  var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
  var jobId = queryResults.jobReference.jobId;

  // Wait for BQ job completion (with exponential backoff).
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
  }

  // Get all results from BigQuery.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  // Return null if no data returned.
  if (!rows) {
    return Logger.log('No rows returned.');
  }

  // Create the new results spreadsheet.
  var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
  var sheet = spreadsheet.getActiveSheet();

  // Add headers to Sheet.
  var headers = queryResults.schema.fields.map(function(field) {
    return field.name.toUpperCase();
  });
  sheet.appendRow(headers);

  // Append the results.
  var data = new Array(rows.length);
  for (var i = 0; i < rows.length; i++) {
    var cols = rows[i].f;
    data[i] = new Array(cols.length);
    for (var j = 0; j < cols.length; j++) {
      data[i][j] = cols[j].v;
    }
  }

  // Start storing data in row 2, col 1
  var START_ROW = 2;      // skip header row
  var START_COL = 1;
  sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);

  // Return the spreadsheet object for later use.
  return spreadsheet;
}

/**
 * Uses spreadsheet data to create columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} visualizing the results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first and only) Sheet.
  var sheet = spreadsheet.getSheets()[0];
  // Data range in Sheet is from cell A2 to B11
  var START_CELL = 'A2';  // skip header row
  var END_CELL = 'B11';
  // Place chart on Sheet starting on cell E5.
  var START_ROW = 5;      // row 5
  var START_COL = 5;      // col E
  var OFFSET = 0;

  // Create & place chart on the Sheet using above params.
  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.COLUMN)
     .addRange(sheet.getRange(START_CELL + ':' + END_CELL))
     .setPosition(START_ROW, START_COL, OFFSET, OFFSET)
     .build();
  sheet.insertChart(chart);
}

/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  createColumnChart(spreadsheet);
}

احفظ الملف، ثم انتقِل إلى أعلى محرر الرموز وبدِّل إلى تنفيذ createBigQueryPresentation() بدلاً من runQuery(). بعد تشغيلها، ستحصل على جدول بيانات آخر من Google، ولكن هذه المرة، سيظهر رسم بياني في الجدول بجانب البيانات:

يتضمّن الجزء الأخير من الدرس العملي إنشاء عرض تقديمي جديد في "العروض التقديمية من Google"، وملء العنوان والعنوان الفرعي في شريحة العنوان، ثم إضافة شريحتَين جديدتَين، واحدة لكل خلية من خلايا البيانات والأخرى للرسم البياني.

  1. إنشاء مجموعة شرائح سيتم تنفيذ كل العمل على عرض الشرائح في createSlidePresentation() الذي سنضيفه إلى bq-sheets-slides.js مباشرةً بعد createColumnChart(). لنبدأ بإنشاء مجموعة شرائح جديدة، ثم نضيف عنوانًا وعنوانًا فرعيًا إلى شريحة العنوان التلقائية التي نحصل عليها مع جميع العروض التقديمية الجديدة.
/**
 * Create presentation with spreadsheet data & chart
 * @param {Spreadsheet} Spreadsheet with results data
 * @param {EmbeddedChart} Sheets chart to embed on slide
 * @returns {Presentation} Slide deck with results
 */
function createSlidePresentation(spreadsheet, chart) {
  // Create the new presentation.
  var deck = SlidesApp.create(QUERY_NAME);

  // Populate the title slide.
  var [title, subtitle] = deck.getSlides()[0].getPageElements();
  title.asShape().getText().setText(QUERY_NAME);
  subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' +
    'Google Apps Script, BigQuery, Sheets, Slides');
  1. أضِف جدول بيانات. الخطوة التالية في createSlidePresentation() هي استيراد بيانات الخلايا من "جدول بيانات Google" إلى عرض الشرائح الجديد. إليك مقتطف الرمز هذا، لذا أضِفه إلى الدالة:
  // Data range to copy is from cell A1 to B11
  var START_CELL = 'A1';  // include header row
  var END_CELL = 'B11';
  // Add the table slide and insert an empty table on it of
  // the dimensions of the data range; fails if Sheet empty.
  var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  var sheetValues = spreadsheet.getSheets()[0].getRange(
      START_CELL + ':' + END_CELL).getValues();
  var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);

  // Populate the table with spreadsheet data.
  for (var i = 0; i < sheetValues.length; i++) {
    for (var j = 0; j < sheetValues[0].length; j++) {
      table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
    }
  }
  1. استيراد رسم بياني الخطوة الأخيرة في createSlidePresentation() هي إنشاء شريحة أخرى واستيراد الرسم البياني من جدول البيانات وإرجاع عنصر Presentation. أضِف مقتطف الرمز النهائي هذا إلى الدالة:
  // Add a chart slide and insert the chart on it.
  var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  chartSlide.insertSheetsChart(chart);

  // Return the presentation object for later use.
  return deck;
}
  1. الرسم البياني للمرتجعات بعد أن اكتملت الدالة النهائية، ألقِ نظرة أخرى على توقيعها. نعم، تتطلّب createSlidePresentation() كلاً من جدول البيانات وعنصر الرسم البياني. لقد عدّلنا runQuery() لعرض العنصر Spreadsheet، ولكن علينا الآن إجراء تغيير مماثل على createColumnChart() لعرض عنصر الرسم البياني (EmbeddedChart). ارجع إلى تطبيقك لإضافة سطر أخير من الرمز في نهاية createColumnChart() لإجراء ذلك:
  // NEW: Return chart object for later use
  return chart;
}
  1. تعديل createBigQueryPresentation() بما أنّ الدالة createColumnChart() تعرض الرسم البياني، علينا حفظ هذا الرسم البياني في متغيّر ثم تمرير كلٍّ من جدول البيانات والرسم البياني إلى الدالة createSlidePresentation(). بما أنّنا نسجّل عنوان URL لجدول البيانات الذي تم إنشاؤه حديثًا، لننسخ أيضًا عنوان URL الخاص بالعرض التقديمي الجديد. عدِّل createBigQueryPresentation() ليصبح على النحو التالي:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet,
 * and adds the data and chart to a new slide presentation.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  var chart = createColumnChart(spreadsheet); // UPDATED
  var deck = createSlidePresentation(spreadsheet, chart); // NEW
  Logger.log('Results slide deck created: %s', deck.getUrl()); // NEW
}
  1. احفظ الملف وشغِّل createBigQueryPresentation() مرة أخرى. قبل تنفيذ ذلك، يجب أن تدرك أنّ تطبيقك يحتاج الآن إلى مجموعة أخرى من الأذونات من المستخدم لعرض عروضك التقديمية في "جداول بيانات Google" وإدارتها. بعد منح هذا الإذن، سيتم تشغيل التطبيق كما كان من قبل.
  2. بالإضافة إلى "ورقة Google" التي تم إنشاؤها، من المفترض أن يظهر لك أيضًا عرض تقديمي جديد في "العروض التقديمية من Google" يتضمّن 3 شرائح (العنوان وجدول البيانات والرسم البياني للبيانات)، كما هو موضّح أدناه:

تهانينا! لقد أنشأت الآن تطبيقًا يستفيد من كلا جانبي Google Cloud من خلال تنفيذ طلب Google BigQuery يستعلم عن إحدى مجموعات البيانات العامة، وينشئ ورقة بيانات جديدة على Google لتخزين النتائج، ويضيف رسمًا بيانيًا استنادًا إلى البيانات التي تم استردادها للتو، وأخيرًا ينشئ عرضًا تقديميًا على "العروض التقديمية من Google" يعرض النتائج بالإضافة إلى الرسم البياني في جدول البيانات.

هذا ما فعلته من الناحية الفنية. بشكل عام، انتقلت من تحليل البيانات الكبيرة إلى شيء يمكنك تقديمه إلى الجهات المعنية، وكل ذلك في الرمز، وكل ذلك آليًا. نأمل أن يلهمك هذا النموذج لتعديله واستخدامه في مشاريعك. في نهاية هذا الدرس العملي، سنقدِّم بعض الاقتراحات حول كيفية تحسين هذا التطبيق النموذجي.

بعد إجراء التغييرات المذكورة أعلاه من المهمة النهائية (باستثناء PROJECT_ID)، من المفترض أن يبدو bq-sheets-slides.js الآن على النحو التالي (ويمكن العثور عليه أيضًا في المجلد final في مستودع GitHub):

bq-sheets-slides.js

/**
 * Copyright 2018 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into Sheet. You must enable
 * the BigQuery advanced service before you can run this code.
 * @see http://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
 */
function runQuery() {
  // Replace sample with your own BigQuery query.
  var request = {
    query:
        'SELECT ' +
            'LOWER(word) AS word, ' +
            'SUM(word_count) AS count ' +
        'FROM [bigquery-public-data:samples.shakespeare] ' +
        'GROUP BY word ' +
        'ORDER BY count ' +
        'DESC LIMIT 10'
  };
  var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
  var jobId = queryResults.jobReference.jobId;

  // Wait for BQ job completion (with exponential backoff).
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
  }

  // Get all results from BigQuery.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  // Return null if no data returned.
  if (!rows) {
    return Logger.log('No rows returned.');
  }

  // Create the new results spreadsheet.
  var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
  var sheet = spreadsheet.getActiveSheet();

  // Add headers to Sheet.
  var headers = queryResults.schema.fields.map(function(field) {
    return field.name.toUpperCase();
  });
  sheet.appendRow(headers);

  // Append the results.
  var data = new Array(rows.length);
  for (var i = 0; i < rows.length; i++) {
    var cols = rows[i].f;
    data[i] = new Array(cols.length);
    for (var j = 0; j < cols.length; j++) {
      data[i][j] = cols[j].v;
    }
  }

  // Start storing data in row 2, col 1
  var START_ROW = 2;      // skip header row
  var START_COL = 1;
  sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);

  // Return the spreadsheet object for later use.
  return spreadsheet;
}

/**
 * Uses spreadsheet data to create columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} visualizing the results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first and only) Sheet.
  var sheet = spreadsheet.getSheets()[0];
  // Data range in Sheet is from cell A2 to B11
  var START_CELL = 'A2';  // skip header row
  var END_CELL = 'B11';
  // Place chart on Sheet starting on cell E5.
  var START_ROW = 5;      // row 5
  var START_COL = 5;      // col E
  var OFFSET = 0;

  // Create & place chart on the Sheet using above params.
  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.COLUMN)
     .addRange(sheet.getRange(START_CELL + ':' + END_CELL))
     .setPosition(START_ROW, START_COL, OFFSET, OFFSET)
     .build();
  sheet.insertChart(chart);

  // Return the chart object for later use.
  return chart;
}

/**
 * Create presentation with spreadsheet data & chart
 * @param {Spreadsheet} Spreadsheet with results data
 * @param {EmbeddedChart} Sheets chart to embed on slide
 * @returns {Presentation} Returns a slide deck with results
 * @see http://developers.google.com/apps-script/reference/slides/presentation
 */
function createSlidePresentation(spreadsheet, chart) {
  // Create the new presentation.
  var deck = SlidesApp.create(QUERY_NAME);

  // Populate the title slide.
  var [title, subtitle] = deck.getSlides()[0].getPageElements();
  title.asShape().getText().setText(QUERY_NAME);
  subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' +
    'Google Apps Script, BigQuery, Sheets, Slides');

  // Data range to copy is from cell A1 to B11
  var START_CELL = 'A1';  // include header row
  var END_CELL = 'B11';
  // Add the table slide and insert an empty table on it of
  // the dimensions of the data range; fails if Sheet empty.
  var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  var sheetValues = spreadsheet.getSheets()[0].getRange(
      START_CELL + ':' + END_CELL).getValues();
  var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);

  // Populate the table with spreadsheet data.
  for (var i = 0; i < sheetValues.length; i++) {
    for (var j = 0; j < sheetValues[0].length; j++) {
      table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
    }
  }

  // Add a chart slide and insert the chart on it.
  var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
  chartSlide.insertSheetsChart(chart);

  // Return the presentation object for later use.
  return deck;
}

/**
 * Runs a BigQuery query, adds data and a chart in a Sheet,
 * and adds the data and chart to a new slide presentation.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  var chart = createColumnChart(spreadsheet);
  var deck = createSlidePresentation(spreadsheet, chart);
  Logger.log('Results slide deck created: %s', deck.getUrl());
}

الملف "الثاني" في هذا الدرس العملي هو ملف بيان "برمجة التطبيقات"، appsscript.json، ولا يلعب أي دور في هذا الدرس. يمكنك الوصول إليه من خلال الانتقال إلى علامة تبويب متصفّح "محرّر الرموز" واختيار عرض > عرض ملف البيان من القائمة في أعلى الصفحة. يجب أن تبدو المحتويات على النحو التالي:

appsscript.json

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "BigQuery",
      "serviceId": "bigquery",
      "version": "v2"
    }]
  },
  "exceptionLogging": "STACKDRIVER"
}

ملف البيان هو ملف إعداد على مستوى النظام تستخدمه "برمجة التطبيقات" لمعرفة بيئة التنفيذ التي يجب توفيرها لتطبيقك. لا يتناول هذا الدرس التطبيقي العملي محتوى ملف البيان، ولكن يمكنك الاطّلاع على فكرة عن وظيفة هذا الملف.

في ما يلي مراجع إضافية لمساعدتك في التعرّف بشكل أكبر على المواد التي يغطيها هذا الدرس العملي، بالإضافة إلى استكشاف طرق أخرى للوصول إلى أدوات المطوّرين من Google آليًا. نحرص على أن يكون هذا الدرس التطبيقي العملي متزامنًا مع المستودع.

مراجع لهذا التطبيق

الوثائق

دروس تطبيقية أخرى حول الترميز

مبتدئ

متوسّط

التطبيقات المرجعية

في ما يلي "تحديات برمجية" مختلفة يمكنك من خلالها تحسين أو زيادة العيّنة التي أنشأناها في هذا الدرس العملي. هذه القائمة ليست شاملة بالتأكيد، ولكنّها ستوفّر بعض الأفكار الملهمة التي يمكنك الاستفادة منها في الخطوة التالية.

  • التطبيق: هل تريد تجنُّب القيود المفروضة على استخدام JavaScript أو القيود التي تفرضها "برمجة تطبيقات Google"؟ يمكنك نقل هذا التطبيق إلى لغة البرمجة المفضّلة لديك التي تستخدم واجهات REST API لكلّ من Google BigQuery و"جداول بيانات Google" و"العروض التقديمية من Google".
  • BigQuery جرِّب طلب بحث مختلفًا لمجموعة بيانات شكسبير... ربما تجد طلب بحث يهمّك. يمكن العثور على نموذج طلب بحث آخر في تطبيق نموذج BigQuery الأصلي في "برمجة تطبيقات Google".
  • BigQuery جرِّب بعض مجموعات البيانات العامة الأخرى في BigQuery، فقد تجد مجموعة بيانات أكثر أهمية بالنسبة إليك.
  • BigQuery لقد أشرنا سابقًا إلى طلبات بحث أخرى يمكنك تجربتها على أعمال شكسبير أو جداول البيانات العامة الأخرى، وأردنا إعادة مشاركة صفحة الويب هذه بالإضافة إلى هذه الصفحة مرة أخرى.
  • جداول بيانات Google جرِّب أنواعًا أخرى من الرسوم البيانية.
  • جداول بيانات Google وBigQuery يمكنك عكس الأدوار... ربما لديك مجموعة كبيرة من البيانات في جدول بيانات في مكان ما. في عام 2016، أتاح فريق BigQuery للمطوّرين استخدام "جداول بيانات Google" كمصدر للبيانات (يمكنك الاطّلاع على مشاركة المدوّنة الأولى والثانية لمزيد من المعلومات).
  • العروض التقديمية من Google أضِف شرائح أخرى إلى العرض التقديمي الذي تم إنشاؤه، مثل الصور أو مواد العرض الأخرى المرتبطة بتحليل البيانات الكبيرة. إليك دليلًا حول الخدمة المضمّنة في "العروض التقديمية من Google" لمساعدتك على البدء.
  • G Suite البحث عن استخدام لخدمات G Suite أو خدمات Google المضمّنة الأخرى من "برمجة تطبيقات Google"، أي Gmail وGoogle Drive و"تقويم Google" و"مستندات Google" و"خرائط Google" و"إحصاءات Google" وYouTube وما إلى ذلك، بالإضافة إلى الخدمات المتقدّمة الأخرى للحصول على مزيد من المعلومات، يمكنك الاطّلاع على نظرة عامة على المراجع لكل من الخدمات المضمّنة والمتقدّمة.