Earth Engine และ BigQuery

เอกสารนี้ให้คําแนะนําเกี่ยวกับการผสานรวม Google Earth Engine (EE) กับ BigQuery (BQ) สําหรับการวิเคราะห์เชิงพื้นที่ที่มีประสิทธิภาพ โดยจะครอบคลุมการโอนข้อมูลระหว่างแพลตฟอร์ม 2 แพลตฟอร์ม ข้อควรพิจารณาด้านประสิทธิภาพ ข้อจํากัด และผลกระทบด้านต้นทุน

BigQuery คืออะไร

BigQuery เป็นคลังข้อมูลแบบ Serverless ที่มีการจัดการครบวงจรของ Google ซึ่งช่วยให้วิเคราะห์ข้อมูลหลายเพตะไบต์ได้ ซึ่งเชี่ยวชาญในการค้นหาด้วย SQL ความเร็วสูงและรองรับข้อมูลเชิงพื้นที่

ฉันควรใช้ BigQuery หรือ Earth Engine เมื่อใด

BigQuery Earth Engine
ประเภทข้อมูล ข้อมูลเวกเตอร์เชิงวิเคราะห์ที่มีโครงสร้างเป็นหลัก รองรับการดำเนินการเชิงพื้นที่กับข้อมูล GEOGRAPHY ข้อมูลแรสเตอร์เป็นหลัก แต่รองรับข้อมูลเวกเตอร์ด้วย
กำลังประมวลผล การค้นหาแบบ SQL ที่เพิ่มประสิทธิภาพสำหรับการรวมและการรวมหลายรายการในขนาดใหญ่ การผสานรวมอย่างลึกซึ้งกับ BQ และแมชชีนเลิร์นนิง JavaScript และ Python API สําหรับการประมวลผลและการวิเคราะห์แรสเตอร์ รวมถึงอัลกอริทึมเชิงพื้นที่ขั้นสูงและแมชชีนเลิร์นนิง
ปรับขนาด พื้นที่เก็บข้อมูลและการวิเคราะห์ขนาดใหญ่ระดับเพตะไบต์ มุ่งเน้นที่การประมวลผลข้อมูลตาราง พื้นที่เก็บข้อมูลและการวิเคราะห์ขนาดใหญ่ระดับเพตะไบต์ มุ่งเน้นที่การวิเคราะห์เชิงพื้นที่ โดยมีข้อจํากัดด้านขนาดการประมวลผลข้อมูลเวกเตอร์
กรณีการใช้งาน คลังข้อมูล ธุรกิจ ภูมิศาสตร์ การวิเคราะห์ชุดข้อมูลเวกเตอร์ขนาดใหญ่ การวิเคราะห์พื้นที่ภูมิศาสตร์ การตรวจจับระยะไกล การตรวจสอบสิ่งแวดล้อม แมชชีนเลิร์นนิง ในข้อมูลแรสเตอร์

ข้อมูลเวกเตอร์และแรสเตอร์

ข้อมูลเวกเตอร์คือจุด เส้น และรูปหลายเหลี่ยมบนพื้นผิวโลก ใน BigQuery ระบบจะจัดเก็บข้อมูลเวกเตอร์โดยใช้ประเภทข้อมูล GEOGRAPHY ส่วนใน Earth Engine ข้อมูลเหล่านี้จะเป็นออบเจ็กต์ ee.Geometry

ข้อมูลแรสเตอร์คือตารางพิกเซลที่โปรเจ็กต์ Earth Engine ได้รับการเพิ่มประสิทธิภาพเพื่อการจัดการและการประมวลผลชุดข้อมูลแรสเตอร์ขนาดใหญ่

ประโยชน์ของการใช้ทั้ง 2 ระบบ

ความสามารถในการปรับขนาดของ 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 เหล่านี้ได้จากมุมมองงานในคอนโซลระบบคลาวด์หรือในเครื่องมือแก้ไขโค้ด 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 โดยจำกัดเพิ่มเติมที่ 8 MB ต่อแถว โปรดดูชุดปัญหาที่ทราบแล้วสำหรับการส่งออกข้อมูล 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 และนำไปใช้ที่นั่น 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) และความซับซ้อนของรูปทรงเรขาคณิตที่ได้

ตัวกรอง

แนวทางปฏิบัติแนะนำสำหรับการกรองมีดังนี้

  • การกรองตั้งแต่เนิ่นๆ และบ่อยครั้ง: ใช้ตัวกรองตั้งแต่เนิ่นๆ ในไปป์ไลน์การประมวลผลข้อมูล โดยควรใช้ภายในการค้นหา BigQuery SQL ซึ่งจะช่วยลดปริมาณข้อมูลที่ Earth Engine โอนและประมวลผล
  • เพิ่มความเฉพาะเจาะจง: สร้างตัวกรองที่เลือกชุดข้อมูลย่อยที่เล็กลงและเฉพาะเจาะจงมากขึ้น หลีกเลี่ยงตัวกรองที่กว้างเกินไปซึ่งดึงข้อมูลที่ไม่จําเป็น
  • รวมตัวกรอง: ใช้เงื่อนไขตัวกรองหลายรายการร่วมกันเพื่อจำกัดผลการค้นหาให้แคบลงอย่างมีประสิทธิภาพ
  • ลดความซับซ้อน: เมื่อเป็นไปได้ ให้แยกตัวกรองที่ซับซ้อนออกเป็นเงื่อนไขที่ง่ายขึ้นเพื่อไม่ให้มีขนาดเกินขีดจํากัด 1 MB สำหรับสตริงตัวกรอง
  • การคลัสเตอร์: การค้นหาเชิงพื้นที่อาจมีประสิทธิภาพมากขึ้นในคอลัมน์ที่คลัสเตอร์
  • แนะนำให้กรองใน BigQuery: หากต้องการลดขนาดข้อมูล คุณควรกรองข้อมูลเบื้องต้นใน BigQuery ก่อนประมวลผลเพิ่มเติมใน Earth Engine หากใช้ไม่ได้ ให้ใช้ตัวกรองเพิ่มเติมเป็นตัวกรองหลังภายในสคริปต์ Earth Engine หลังจากโหลดข้อมูลจาก BigQuery

ขีดจํากัดทั้งระบบ

  • ขีดจํากัดขนาดตาราง 400 GB
    • Earth Engine ไม่อนุญาตให้อ่านตารางที่มีขนาดใหญ่กว่า 400 GB
  • ขนาดตารางกลาง 10 GB
    • ผลการค้นหาแต่ละรายการมีขีดจำกัดอยู่ที่ 10 GB เลือกเฉพาะคอลัมน์ที่จำเป็นเพื่อทำให้ข้อความค้นหามีความเฉพาะเจาะจงมากขึ้น เช่น เพิ่มประโยค LIMIT และ WHERE
    • Earth Engine จำกัดจำนวนข้อมูลที่สแกนได้ใน BigQuery
  • ขีดจํากัด 1 MB สําหรับขนาดสตริงตัวกรองหลังการเปลี่ยนรูปแบบ
    • ตัวกรองที่ซับซ้อนอาจทําให้สตริงตัวกรองมีขนาดใหญ่เกินขีดจํากัด
  • การหมดเวลา
    • Earth Engine ใช้การหมดเวลากับการค้นหา ซึ่งอาจแตกต่างกันไปตามขอบเขต (เช่น กลุ่ม ออนไลน์)
  • ขีดจํากัดของ BigQuery

การควบคุมค่าใช้จ่าย

โดยปกติแล้ว จะไม่เสียค่าใช้จ่ายโดยตรงในการย้ายข้อมูลระหว่าง BigQuery กับ Earth Engine อย่างไรก็ตาม ขนาดของข้อมูลที่โอนอาจส่งผลต่อต้นทุนการประมวลผลทั้งใน BigQuery และ Earth Engine

หากการค้นหาเกี่ยวข้องกับการประมวลผลฝั่ง BigQuery ระบบจะเรียกเก็บเงินจาก BigQuery ตามการกำหนดค่า BigQuery

หากการค้นหาเกี่ยวข้องกับการประมวลผลภายใน Earth Engine และโปรเจ็กต์ของคุณลงทะเบียนเพื่อการใช้งานเชิงพาณิชย์ คุณจะต้องเสียค่าใช้จ่ายตามเวลาที่ใช้ EECU ของ Earth Engine ตามการกำหนดค่าการเรียกเก็บเงินของ Earth Engine

บันทึกและการแก้ไขข้อบกพร่อง

การดำเนินการอ่าน

เมื่ออ่านข้อมูลจาก BigQuery โดยใช้ ee.FeatureCollection.loadBigQueryTable() ระบบจะไม่บันทึกการดำเนินการที่เกี่ยวข้องเป็นงานใน BigQuery อย่างชัดเจน ซึ่งหมายความว่าคุณอาจเห็นรายละเอียดการบันทึกอื่นๆ (เช่น บันทึกการตรวจสอบของ Cloud) ที่ไม่มีงานอ่าน BigQuery ที่เกี่ยวข้อง

ประวัติการค้นหา

การค้นหาที่ดำเนินการโดยใช้ ee.FeatureCollection.runBigQuery() จะบันทึกไว้ในประวัติการค้นหา BigQuery ของโปรเจ็กต์ คุณสามารถเข้าถึงประวัติการค้นหาผ่าน UI ของ BigQuery ในคอนโซล Cloud