ส่งออกและนำเข้าข้อมูล

คุณสามารถใช้บริการส่งออกและนำเข้าที่มีการจัดการของ Cloud Firestore เพื่อกู้คืนข้อมูลที่ลบโดยไม่ตั้งใจและส่งออกข้อมูลเพื่อประมวลผลแบบออฟไลน์ได้ คุณสามารถส่งออกเอกสารทั้งหมดหรือเฉพาะกลุ่มคอลเล็กชันที่ต้องการได้ ในทำนองเดียวกัน คุณสามารถนำเข้าข้อมูลทั้งหมดจากการส่งออกหรือเฉพาะกลุ่มคอลเล็กชันที่ต้องการได้ ข้อมูลที่ส่งออกจากฐานข้อมูล Cloud Firestore หนึ่งจะนำเข้าสู่ฐานข้อมูล Cloud Firestore อื่นได้ นอกจากนี้ คุณยังโหลดการส่งออก Cloud Firestore ไปยัง BigQuery ได้ด้วย

หน้านี้อธิบายวิธีส่งออกและนำเข้าเอกสาร Cloud Firestore โดยใช้บริการส่งออกและนำเข้าที่มีการจัดการและ Cloud Storage บริการส่งออกและนำเข้าที่มีการจัดการของ Cloud Firestore พร้อมใช้งานผ่านเครื่องมือบรรทัดคำสั่ง gcloud และ Cloud Firestore API (REST, RPC)

ก่อนเริ่มต้น

คุณต้องดำเนินการต่อไปนี้ให้เสร็จสิ้นก่อนจึงจะใช้บริการส่งออกและนำเข้าที่มีการจัดการได้

  1. เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud เฉพาะโปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินเท่านั้นที่จะใช้ฟังก์ชันการส่งออกและนำเข้าได้
  2. สร้างบักเก็ต Cloud Storage สำหรับโปรเจ็กต์ในตำแหน่งที่อยู่ใกล้กับตำแหน่งฐานข้อมูล Cloud Firestore คุณไม่สามารถใช้บักเก็ต Requester Pays หรือบักเก็ต Rapid สำหรับการดำเนินการส่งออกและนำเข้าได้
  3. ตรวจสอบว่าบัญชีของคุณมีสิทธิ์ที่จำเป็นสำหรับ Cloud Firestore และ Cloud Storage หากคุณเป็นเจ้าของโปรเจ็กต์ บัญชีของคุณจะมีสิทธิ์ที่จำเป็น หรือบทบาทต่อไปนี้จะให้สิทธิ์ที่จำเป็นสำหรับการดำเนินการส่งออกและนำเข้า รวมถึงการเข้าถึง Cloud Storage

    • บทบาท Cloud Firestore: Owner, Cloud Datastore Owner หรือ Cloud Datastore Import Export Admin
    • บทบาท Cloud Storage: Owner หรือ Storage Admin

สิทธิ์ของ Service Agent

การดำเนินการส่งออกและนำเข้าใช้ Agent บริการ Cloud Firestore เพื่อให้สิทธิ์การดำเนินการ Cloud Storage ตัวแทนบริการ Cloud Firestore ใช้รูปแบบการตั้งชื่อต่อไปนี้

ตัวแทนบริการ Cloud Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Service Agent ได้ที่หัวข้อ Service Agent

ตัวแทนบริการ Cloud Firestore ต้องมีสิทธิ์เข้าถึงบักเก็ต Cloud Storage ที่ใช้ในการดำเนินการส่งออกหรือนำเข้า หากบักเก็ต Cloud Storage อยู่ในโปรเจ็กต์เดียวกับฐานข้อมูล Cloud Firestore ตัวแทนบริการ Cloud Firestore จะเข้าถึงบักเก็ตได้โดยค่าเริ่มต้น

หากบักเก็ต Cloud Storage อยู่ในโปรเจ็กต์อื่น คุณ ต้องให้สิทธิ์เข้าถึงบักเก็ต Cloud Storage แก่ตัวแทนบริการ Cloud Firestore

มอบหมายบทบาทให้กับตัวแทนบริการ

คุณสามารถใช้เครื่องมือบรรทัดคำสั่ง gsutil เพื่อมอบหมายบทบาทใดบทบาทหนึ่งด้านล่างได้ ตัวอย่างเช่น หากต้องการมอบหมายบทบาทผู้ดูแลระบบพื้นที่เก็บข้อมูลให้กับตัวแทนบริการ Cloud Firestore ให้เรียกใช้คำสั่งต่อไปนี้

gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com:roles/storage.admin \
    gs://[BUCKET_NAME]

แทนที่ PROJECT_NUMBER ด้วยหมายเลขโปรเจ็กต์ ซึ่งใช้เพื่อตั้งชื่อตัวแทนบริการ Cloud Firestore หากต้องการดูชื่อ Service Agent โปรดดูหัวข้อดูชื่อ Service Agent

หรือจะมอบหมายบทบาทนี้โดยใช้คอนโซล Google Cloud ก็ได้

ดูชื่อตัวแทนบริการ

คุณดูบัญชีที่การดำเนินการนำเข้าและส่งออกใช้เพื่อให้สิทธิ์คำขอได้จากหน้านำเข้า/ส่งออกในคอนโซล Google Cloud นอกจากนี้ คุณยังดูได้ว่าฐานข้อมูลใช้ Agent บริการ Cloud Firestore หรือบัญชีบริการ App Engine เดิม

  1. ดูบัญชีการให้สิทธิ์ข้างป้ายกำกับงานนำเข้า/ส่งออกที่เรียกใช้ในชื่อ

Service Agent ต้องมีบทบาท Storage Admin สำหรับบักเก็ต Cloud Storage ที่จะใช้สำหรับการดำเนินการส่งออกหรือนำเข้า

ตั้งค่า gcloud สำหรับโปรเจ็กต์

คุณสามารถเริ่มการดำเนินการนำเข้าและส่งออกผ่านคอนโซล Google Cloud หรือเครื่องมือบรรทัดคำสั่ง gcloud ได้ หากต้องการใช้ gcloud ให้ตั้งค่าเครื่องมือบรรทัดคำสั่งและเชื่อมต่อกับโปรเจ็กต์ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

ส่งออกข้อมูล

การดำเนินการส่งออกจะคัดลอกเอกสารในฐานข้อมูลไปยังชุดไฟล์ในที่เก็บข้อมูล Cloud Storage โปรดทราบว่าการส่งออกไม่ใช่ภาพรวมฐานข้อมูลที่แน่นอนซึ่งถ่ายไว้ ณ เวลาเริ่มต้นการส่งออก การส่งออกอาจรวมถึงการเปลี่ยนแปลงที่เกิดขึ้นขณะที่การดำเนินการทำงานอยู่

ส่งออกเอกสารทั้งหมด

Google Cloud Console

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

  4. คลิกส่งออก

  5. คลิกตัวเลือกส่งออกฐานข้อมูลทั้งหมด

  6. ในส่วนเลือกปลายทาง ให้ป้อนชื่อบักเก็ต Cloud Storage หรือใช้ปุ่มเรียกดูเพื่อเลือกบักเก็ต

  7. คลิกส่งออก

คอนโซลจะกลับไปที่หน้านำเข้า/ส่งออก หากการดำเนินการเริ่มต้นสำเร็จ หน้าเว็บจะเพิ่มรายการลงในหน้าการนำเข้าและส่งออกล่าสุด หากไม่สำเร็จ หน้าเว็บจะแสดงข้อความแสดงข้อผิดพลาด

gcloud

ใช้คำสั่ง firestore export เพื่อส่งออกเอกสารทั้งหมดในฐานข้อมูล โดยแทนที่ [BUCKET_NAME] ด้วยชื่อที่เก็บข้อมูล Cloud Storage ของคุณ เพิ่มแฟล็ก --async เพื่อป้องกันไม่ให้เครื่องมือ gcloud รอให้การดำเนินการเสร็จสมบูรณ์

  gcloud firestore export gs://[BUCKET_NAME] \
  --database=[DATABASE]

แทนที่ค่าต่อไปนี้

  • BUCKET_NAME: จัดระเบียบการส่งออกโดยเพิ่มคำนำหน้าไฟล์หลังชื่อที่เก็บข้อมูล เช่น BUCKET_NAME/my-exports-folder/export-name หากคุณไม่ได้ระบุคำนำหน้าไฟล์ บริการส่งออกที่มีการจัดการจะสร้างคำนำหน้าไฟล์ตามการประทับเวลาปัจจุบัน

  • DATABASE: ชื่อฐานข้อมูลที่ต้องการส่งออกเอกสาร สำหรับฐานข้อมูลเริ่มต้น ให้ใช้ --database='(default)'

เมื่อเริ่มการดำเนินการส่งออกแล้ว การปิดเทอร์มินัลจะไม่ยกเลิกการดำเนินการ โปรดดูหัวข้อยกเลิกการดำเนินการ

ส่งออกกลุ่มคอลเล็กชันที่เฉพาะเจาะจง

Google Cloud Console

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

  4. คลิกส่งออก

  5. คลิกตัวเลือกส่งออกกลุ่มคอลเล็กชันอย่างน้อย 1 กลุ่ม ใช้เมนูเพื่อเลือกกลุ่มคอลเล็กชันอย่างน้อย 1 กลุ่ม

  6. ในส่วนเลือกปลายทาง ให้ป้อนชื่อบักเก็ต Cloud Storage หรือใช้ปุ่มเรียกดูเพื่อเลือกบักเก็ต

  7. คลิกส่งออก

คอนโซลจะกลับไปที่หน้านำเข้า/ส่งออก หากการดำเนินการเริ่มต้นสำเร็จ หน้าเว็บจะเพิ่มรายการลงในหน้าการนำเข้าและส่งออกล่าสุด หากไม่สำเร็จ หน้าเว็บจะแสดงข้อความแสดงข้อผิดพลาด

gcloud

หากต้องการส่งออกกลุ่มคอลเล็กชันที่เฉพาะเจาะจง ให้ใช้แฟล็ก --collection-ids การดำเนินการจะส่งออกเฉพาะกลุ่มคอลเล็กชันที่มีรหัสที่ระบุเท่านั้น กลุ่มคอลเล็กชันประกอบด้วยคอลเล็กชันและคอลเล็กชันย่อยทั้งหมดที่มีรหัสคอลเล็กชันสุดท้ายเป็นรหัสกลุ่มคอลเล็กชัน

gcloud firestore export gs://[BUCKET_NAME] \
--collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] \
--database=[DATABASE]

ตัวอย่างเช่น คุณสามารถออกแบบคอลเล็กชัน restaurants ในฐานข้อมูล foo ให้มีคอลเล็กชันย่อยหลายรายการ เช่น ratings, reviews หรือ outlets หากต้องการส่งออกกลุ่มคอลเล็กชัน reviews คุณต้องระบุไว้อย่างชัดเจนดังนี้

gcloud firestore export gs://[BUCKET_NAME] \
--collection-ids=reviews \
--database='cymbal'

หากระบุ restaurants แทน ระบบจะไม่ส่งออกเอกสารในคอลเล็กชันย่อย reviews

ส่งออกจากประทับเวลา PITR

คุณสามารถส่งออกฐานข้อมูลไปยัง Cloud Storage จากข้อมูล PITR ได้ คุณสามารถส่งออกข้อมูล PITR ที่มีการประทับเวลาเป็นนาทีเต็มภายใน 7 วันที่ผ่านมา แต่ต้องไม่ก่อนวันที่ earliestVersionTime หากไม่มีข้อมูลอยู่ในการประทับเวลาที่ระบุอีกต่อไป การดำเนินการส่งออกจะล้มเหลว

การดำเนินการส่งออก PITR รองรับตัวกรองทั้งหมด รวมถึงการส่งออกเอกสารทั้งหมดและการส่งออกกลุ่มคอลเล็กชันที่เฉพาะเจาะจง

โปรดทราบประเด็นต่อไปนี้ก่อนส่งออกข้อมูล PITR

  • ระบุการประทับเวลาในรูปแบบ RFC 3339 เช่น 2023-05-26T10:20:00.00Z
  • ตรวจสอบว่าการประทับเวลาที่คุณระบุเป็นการประทับเวลาแบบเต็มนาทีภายใน 7 วันที่ผ่านมา แต่ไม่เกิน earliestVersionTime หากไม่มีข้อมูลอยู่ในการประทับเวลาที่ระบุ ระบบจะสร้างข้อผิดพลาดขึ้น
  • ระบบจะไม่เรียกเก็บเงินสำหรับการส่งออก PITR ที่ไม่สำเร็จ

คอนโซล

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล
  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก
  4. คลิกส่งออก
  5. กำหนดค่าแหล่งที่มาของการส่งออกเพื่อส่งออกฐานข้อมูลทั้งหมดหรือเฉพาะกลุ่มคอลเล็กชันที่ต้องการ
  6. ในส่วนเลือกสถานะของฐานข้อมูลที่จะส่งออก ให้เลือกส่งออกจากจุดเวลาก่อนหน้า

    เลือกเวลาสแนปชอตที่จะใช้สำหรับการส่งออก

  7. ในส่วนปลายทาง ให้ป้อนชื่อบักเก็ต Cloud Storage หรือใช้ปุ่มเรียกดูเพื่อเลือกบักเก็ต
  8. คลิกส่งออก

    คอนโซลจะกลับไปที่หน้านำเข้า/ส่งออก หากการดำเนินการเริ่มต้นสำเร็จ หน้าเว็บจะเพิ่มรายการลงในหน้าการนำเข้าและการส่งออกล่าสุด หากไม่สำเร็จ หน้าเว็บจะแสดงข้อความแสดงข้อผิดพลาด

gcloud

คุณสามารถส่งออกฐานข้อมูลไปยัง Cloud Storage จากข้อมูล PITR โดยใช้คำสั่ง gcloud firestore export

ส่งออกฐานข้อมูล โดยระบุพารามิเตอร์ snapshot-time เป็นการประทับเวลาการกู้คืน เรียกใช้คำสั่งต่อไปนี้เพื่อส่งออกฐานข้อมูลไปยังที่เก็บข้อมูล

gcloud firestore export gs://[BUCKET_NAME_PATH] \
    --snapshot-time=[PITR_TIMESTAMP]

โดยที่ PITR_TIMESTAMP คือการประทับเวลา PITR ที่รายละเอียดระดับนาที เช่น 2023-05-26T10:20:00.00Z

เพิ่มแฟล็ก --collection-ids เพื่อส่งออกกลุ่มคอลเล็กชันที่เฉพาะเจาะจง

นำเข้าข้อมูล

เมื่อมีไฟล์ส่งออกใน Cloud Storage แล้ว คุณจะนำเข้าเอกสารในไฟล์เหล่านั้นกลับไปยังโปรเจ็กต์หรือโปรเจ็กต์อื่นได้ โปรดทราบประเด็นต่อไปนี้เกี่ยวกับการดำเนินการนำเข้า

  • เมื่อคุณนำเข้าข้อมูล ระบบจะอัปเดตดัชนีที่จำเป็นโดยใช้คำจำกัดความดัชนีปัจจุบันของฐานข้อมูล การส่งออกจะไม่มีคำจำกัดความของดัชนี

  • การนำเข้าจะไม่กำหนดรหัสเอกสารใหม่ การนำเข้าจะใช้รหัสที่บันทึกไว้ ณ เวลาที่ส่งออก ขณะนำเข้าเอกสาร ระบบจะจองรหัสของเอกสารไว้เพื่อป้องกันไม่ให้รหัสซ้ำกัน หากมีเอกสารที่มีรหัสเดียวกันอยู่แล้ว การนำเข้าจะเขียนทับเอกสารที่มีอยู่

  • หากเอกสารในฐานข้อมูลไม่ได้รับผลกระทบจากการนำเข้า เอกสารนั้นจะยังคงอยู่ในฐานข้อมูลหลังจากการนำเข้า

  • การดำเนินการนำเข้าจะไม่ทริกเกอร์ Cloud Functions Listener ของสแนปชอตจะได้รับการอัปเดตที่เกี่ยวข้องกับการดำเนินการนำเข้า

  • คุณไม่ควรเพิ่มเอกสาร Cloud Firestore ใหม่ที่ไม่ได้อยู่ในไฟล์เอาต์พุตต้นฉบับของการส่งออก หรือนำเอกสารที่มีอยู่ออกจากไฟล์ GCS ก่อนนำเข้า มิฉะนั้น การนำเข้าจะไม่สำเร็จ

  • ชื่อไฟล์ .overall_export_metadata ต้องตรงกับชื่อของโฟลเดอร์หลัก ดังนี้

    gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadata

    หากคุณย้ายหรือคัดลอกไฟล์เอาต์พุตของการส่งออก ให้คงชื่อไฟล์ PARENT_FOLDER_NAME และ .overall_export_metadata ไว้เหมือนเดิม

นำเข้าเอกสารทั้งหมดจากการส่งออก

Google Cloud Console

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

  4. คลิกนำเข้า

  5. ในช่อง Filename ให้ป้อนชื่อไฟล์ของไฟล์ .overall_export_metadata จากการดำเนินการส่งออกที่เสร็จสมบูรณ์ คุณสามารถใช้ปุ่มเรียกดูเพื่อช่วยเลือกไฟล์ได้

  6. คลิกนำเข้า

คอนโซลจะกลับไปที่หน้านำเข้า/ส่งออก หากการดำเนินการเริ่มต้นสำเร็จ หน้าเว็บจะเพิ่มรายการลงในหน้าการนำเข้าและส่งออกล่าสุด หากไม่สำเร็จ หน้าเว็บจะแสดงข้อความแสดงข้อผิดพลาด

gcloud

ใช้คำสั่ง firestore import เพื่อนำเข้าเอกสารจากการดำเนินการส่งออกก่อนหน้านี้

gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ --database=[DATABASE]

แทนที่ค่าต่อไปนี้

  • BUCKET_NAME/EXPORT_PREFIX: ตำแหน่งของไฟล์ส่งออก

  • DATABASE: ชื่อฐานข้อมูล สำหรับฐานข้อมูลเริ่มต้น ให้ใช้ --database='(default)'

เช่น

gcloud firestore import gs://my-bucket/2017-05-25T23:54:39_76544/ --database='cymbal'

คุณสามารถยืนยันตำแหน่งของไฟล์ที่ส่งออกได้ในเบราว์เซอร์ Cloud Storage ในคอนโซล Google Cloud โดยทำดังนี้

เปิดเบราว์เซอร์ Cloud Storage

เมื่อเริ่มการดำเนินการนำเข้าแล้ว การปิดเทอร์มินัลจะไม่ยกเลิกการดำเนินการ โปรดดูหัวข้อยกเลิกการดำเนินการ

นำเข้ากลุ่มคอลเล็กชันที่เฉพาะเจาะจง

Google Cloud Console

คุณไม่สามารถเลือกกลุ่มคอลเล็กชันที่เฉพาะเจาะจงในคอนโซลได้ โปรดใช้ gcloud แทน

gcloud

หากต้องการนําเข้ากลุ่มคอลเล็กชันที่เฉพาะเจาะจงจากชุดไฟล์ส่งออก ให้ใช้แฟล็ก --collection-ids การดำเนินการจะนำเข้าเฉพาะกลุ่มคอลเล็กชันที่มีรหัสที่ระบุเท่านั้น กลุ่มคอลเล็กชันประกอบด้วยคอลเล็กชันและคอลเล็กชันย่อยทั้งหมดที่มีรหัสคอลเล็กชันสุดท้ายเป็นรหัสกลุ่มคอลเล็กชัน ระบุชื่อฐานข้อมูลโดยใช้แฟล็ก --database สำหรับฐานข้อมูลเริ่มต้น ให้ใช้ --database='(default)'

เฉพาะการส่งออกกลุ่มคอลเล็กชันที่เฉพาะเจาะจงเท่านั้นที่รองรับการนําเข้ากลุ่มคอลเล็กชันที่เฉพาะเจาะจง คุณไม่สามารถนำเข้ากลุ่มคอลเล็กชันที่เฉพาะเจาะจงจากการส่งออกเอกสารทั้งหมด

  gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ \
  --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] \
  --database=[DATABASE]

นำเข้าการส่งออก PITR

ใช้ขั้นตอนในหัวข้อนําเข้าเอกสารทั้งหมดเพื่อนําเข้าฐานข้อมูลที่ส่งออก หากมีเอกสารอยู่ในฐานข้อมูลอยู่แล้ว ระบบจะเขียนทับเอกสารนั้น

การจัดการการดำเนินการส่งออกและนำเข้า

หลังจากเริ่มการดำเนินการส่งออกหรือนำเข้า Cloud Firestore จะกำหนดชื่อที่ไม่ซ้ำกันให้กับการดำเนินการ คุณสามารถใช้ชื่อการดำเนินการเพื่อลบ ยกเลิก หรือตรวจสอบสถานะการดำเนินการได้

ชื่อการดำเนินการจะขึ้นต้นด้วย projects/[PROJECT_ID]/databases/(default)/operations/ เช่น

projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

อย่างไรก็ตาม คุณสามารถละเว้นคำนำหน้าได้เมื่อระบุชื่อการดำเนินการสำหรับคำสั่ง describe, cancel และ delete

แสดงรายการการดำเนินการส่งออกและนำเข้าทั้งหมด

Google Cloud Console

คุณดูรายการการดำเนินการส่งออกและนำเข้าล่าสุดได้ในหน้านำเข้า/ส่งออกของคอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

gcloud

ใช้คำสั่ง operations list เพื่อดูการดำเนินการส่งออกและนำเข้าทั้งหมดที่กำลังทำงานอยู่และเพิ่งเสร็จสมบูรณ์

gcloud firestore operations list

ตรวจสอบสถานะการดำเนินการ

Google Cloud Console

คุณดูสถานะของการดำเนินการส่งออกหรือนำเข้าล่าสุดได้ในหน้านำเข้า/ส่งออกของคอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

gcloud

ใช้คำสั่ง operations describe เพื่อแสดงสถานะของการดำเนินการส่งออกหรือนำเข้า

gcloud firestore operations describe [OPERATION_NAME]

ประเมินเวลาที่ใช้ในการดำเนินการให้เสร็จสมบูรณ์

คำขอสถานะของการดำเนินการที่ใช้เวลานานจะแสดงผลเมตริก workEstimated และ workCompleted ระบบจะแสดงผลเมตริกแต่ละรายการทั้งในรูปแบบจำนวนไบต์และจำนวนเอนทิตี ดังนี้

  • workEstimated แสดงจำนวนไบต์และเอกสารทั้งหมดโดยประมาณที่การดำเนินการจะประมวลผล Cloud Firestore อาจละเว้นเมตริกนี้หากไม่สามารถประมาณได้

  • workCompleted แสดงจำนวนไบต์และเอกสารที่ประมวลผลจนถึงตอนนี้ หลังจากดำเนินการเสร็จสิ้น ค่าจะแสดงจำนวนไบต์และเอกสารทั้งหมดที่ประมวลผลจริง ซึ่งอาจมากกว่าค่าของ workEstimated

หาร workCompleted ด้วย workEstimated เพื่อดูความคืบหน้าโดยประมาณ ค่าประมาณนี้อาจไม่ถูกต้อง เนื่องจากขึ้นอยู่กับการรวบรวมสถิติที่ล่าช้า

ยกเลิกการดำเนินการ

Google Cloud Console

คุณยกเลิกการดำเนินการส่งออกหรือนำเข้าที่ทำงานอยู่ได้ในหน้านำเข้า/ส่งออกของคอนโซล Google Cloud

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก ในตารางการนำเข้าและการส่งออกล่าสุด การดำเนินการที่กำลังทำงานอยู่จะมีปุ่มยกเลิกในคอลัมน์เสร็จสมบูรณ์ คลิกปุ่มยกเลิกเพื่อหยุดการดำเนินการ ปุ่มจะเปลี่ยนเป็นข้อความกำลังยกเลิก แล้วเปลี่ยนเป็นยกเลิกแล้วเมื่อการดำเนินการหยุดลงโดยสมบูรณ์

ตารางการนำเข้าและส่งออกล่าสุดในคอนโซลแสดงการนำเข้าข้อมูลที่กำลังดำเนินอยู่พร้อมตัวเลือก "ยกเลิก" เพื่อหยุดการดำเนินการ

gcloud

ใช้คำสั่ง operations cancel เพื่อหยุดการดำเนินการที่กำลังดำเนินอยู่

gcloud firestore operations cancel [OPERATION_NAME]

การยกเลิกการดำเนินการที่กำลังทำงานอยู่จะไม่ยกเลิกการดำเนินการ การยกเลิกการส่งออกจะทำให้เอกสารที่ส่งออกไปแล้วยังคงอยู่ใน Cloud Storage และการยกเลิกการนำเข้าจะทำให้การอัปเดตที่ดำเนินการไปแล้วในฐานข้อมูลยังคงอยู่ คุณไม่สามารถนำเข้าการส่งออกที่เสร็จสมบูรณ์บางส่วนได้

ลบการดำเนินการ

ใช้คำสั่ง gcloud firestore operations delete เพื่อนำการดำเนินการออกจากรายการการดำเนินการล่าสุด คำสั่งนี้จะไม่ลบไฟล์ส่งออกจาก Cloud Storage

gcloud firestore operations delete [OPERATION_NAME]

การเรียกเก็บเงินและการกำหนดราคาสำหรับการดำเนินการส่งออกและนำเข้า

คุณต้องเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud ก่อนใช้บริการส่งออกและนำเข้าที่มีการจัดการ

การดำเนินการส่งออกและนำเข้าจะมีการเรียกเก็บเงินสำหรับการอ่านและเขียนเอกสารตามอัตราที่ระบุไว้ในราคาของ Cloud Firestore การดำเนินการส่งออกจะทำให้เกิดการดำเนินการอ่าน 1 ครั้งต่อเอกสารที่ส่งออก การนำเข้าจะทำให้เกิดการดำเนินการเขียน 1 ครั้งต่อเอกสารที่นำเข้า

ไฟล์เอาต์พุตที่จัดเก็บไว้ใน Cloud Storage จะนับรวมในค่าใช้จ่ายในการจัดเก็บข้อมูล Cloud Storage

การดำเนินการส่งออกหรือนำเข้าจะไม่ทริกเกอร์การแจ้งเตือนงบประมาณ Google Cloud จนกว่าจะเสร็จสมบูรณ์ การดำเนินการส่งออกและนำเข้าจะไม่ส่งผลต่อการใช้งานที่แสดงในส่วนการใช้งานของคอนโซล

การดูค่าใช้จ่ายในการส่งออกและนำเข้า

การดำเนินการส่งออกและนำเข้าจะใช้ป้ายกำกับ goog-firestoremanaged:exportimport กับการดำเนินการที่เรียกเก็บเงิน ในหน้ารายงานการเรียกเก็บเงินใน Cloud คุณสามารถใช้ป้ายกำกับนี้เพื่อดูค่าใช้จ่ายที่เกี่ยวข้องกับการดำเนินการนำเข้าและส่งออกได้ ดังนี้

เข้าถึงป้ายกำกับ goog-firestoremanaged จากเมนูตัวกรอง

ส่งออกไปยัง BigQuery

คุณสามารถโหลดข้อมูลจากการส่งออก Cloud Firestore ไปยัง BigQuery ได้ แต่เฉพาะในกรณีที่คุณระบุตัวกรอง collection-ids ไว้เท่านั้น ดูการโหลดข้อมูลจากการส่งออก Cloud Firestore

ขีดจำกัด BigQuery คอลัมน์

BigQuery กำหนดขีดจำกัดไว้ที่ 10,000 คอลัมน์ต่อตาราง การดำเนินการส่งออก Cloud Firestore จะสร้างสคีมาตาราง BigQuery สำหรับกลุ่มคอลเล็กชันแต่ละกลุ่ม ในสคีมานี้ ชื่อฟิลด์ที่ไม่ซ้ำกันแต่ละชื่อภายในกลุ่มคอลเล็กชันจะกลายเป็นคอลัมน์สคีมา หากสคีมา BigQuery ของกลุ่มคอลเล็กชันมีคอลัมน์เกิน 10,000 คอลัมน์ การดำเนินการส่งออก Cloud Firestore จะพยายามรักษาจำนวนคอลัมน์ให้อยู่ภายใต้ขีดจำกัดโดยถือว่าช่องแผนที่เป็นไบต์ หากการแปลงนี้ทำให้จำนวนคอลัมน์ต่ำกว่า 10,000 คอลัมน์ คุณจะโหลดข้อมูลลงใน BigQuery ได้ แต่จะค้นหาฟิลด์ย่อยภายในฟิลด์แผนที่ไม่ได้ หากจำนวนคอลัมน์ยังคงเกิน 10,000 คอลัมน์ การดำเนินการส่งออกจะไม่สร้างสคีมา BigQuery สำหรับกลุ่มคอลเล็กชัน และคุณจะโหลดข้อมูลลงใน BigQuery ไม่ได้

ส่งออกไฟล์รูปแบบและข้อมูลเมตา

เอาต์พุตของการส่งออกที่มีการจัดการจะใช้รูปแบบบันทึก LevelDB

ไฟล์ข้อมูลเมตา

การดำเนินการส่งออกจะสร้างไฟล์ข้อมูลเมตาสำหรับกลุ่มคอลเล็กชันแต่ละกลุ่มที่คุณระบุ โดยปกติแล้วไฟล์ข้อมูลเมตาจะชื่อ ALL_NAMESPACES_KIND_[COLLECTION_GROUP_ID].export_metadata

ไฟล์ข้อมูลเมตาคือบัฟเฟอร์โปรโตคอล และคุณสามารถถอดรหัสไฟล์ดังกล่าวได้ด้วยคอมไพเลอร์โปรโตคอล protoc ตัวอย่างเช่น คุณสามารถถอดรหัสไฟล์ข้อมูลเมตาเพื่อระบุกลุ่มคอลเล็กชันที่ไฟล์ส่งออกมีอยู่ได้ดังนี้

protoc --decode_raw < export0.export_metadata

การย้ายข้อมูล Service Agent

Cloud Firestore ใช้ตัวแทนบริการ Cloud Firestore เพื่อให้สิทธิ์การดำเนินการนำเข้าและส่งออกแทนการใช้บัญชีบริการ App Engine Service Agent และบัญชีบริการใช้รูปแบบการตั้งชื่อต่อไปนี้

ตัวแทนบริการ Cloud Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com

ก่อนหน้านี้ Cloud Firestore ใช้บัญชีบริการเริ่มต้น App Engine แทนตัวแทนบริการ Cloud Firestore หากฐานข้อมูลของคุณยังคงใช้บัญชีบริการ App Engine เพื่อนำเข้าหรือส่งออกข้อมูล เราขอแนะนำให้ทำตามวิธีการในส่วนนี้เพื่อย้ายข้อมูลไปใช้ Agent บริการ Cloud Firestore

บัญชีบริการ App Engine
PROJECT_ID@appspot.gserviceaccount.com

เราขอแนะนำให้ใช้ Agent บริการ Cloud Firestore เนื่องจากเป็น Agent สำหรับ Cloud Firestore โดยเฉพาะ มีการแชร์บัญชีบริการ App Engine กับบริการมากกว่า 1 รายการ

ดูบัญชีการให้สิทธิ์

คุณสามารถดูบัญชีที่การดำเนินการนำเข้าและส่งออกใช้เพื่ออนุมัติคำขอได้จากหน้านำเข้า/ส่งออกในคอนโซล Google Cloud นอกจากนี้ คุณยังดูได้ว่าฐานข้อมูลของคุณใช้ Agent บริการ Cloud Firestore อยู่แล้วหรือไม่

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

  4. ดูบัญชีการให้สิทธิ์ข้างป้ายกำกับงานนำเข้า/ส่งออกที่เรียกใช้ในชื่อ

หากโปรเจ็กต์ไม่ได้ใช้ Agent บริการ Cloud Firestore คุณสามารถย้ายข้อมูลไปยัง Agent บริการ Cloud Firestore ได้โดยใช้เทคนิคใดเทคนิคหนึ่งต่อไปนี้

เราขอแนะนำให้ใช้เทคนิคแรกเนื่องจากจะจำกัดขอบเขตของผลกระทบไว้ที่โปรเจ็กต์ Cloud Firestore โปรเจ็กต์เดียว เราไม่แนะนำให้ใช้เทคนิคที่ 2 เนื่องจากไม่ได้ย้ายข้อมูลสิทธิ์ของที่เก็บข้อมูล Cloud Storage ที่มีอยู่ แต่จะมีการปฏิบัติตามข้อกำหนดด้านความปลอดภัยในระดับองค์กร

ย้ายข้อมูลโดยการตรวจสอบและอัปเดตสิทธิ์ของบักเก็ต Cloud Storage

กระบวนการย้ายข้อมูลมี 2 ขั้นตอนดังนี้

  1. อัปเดตสิทธิ์ของที่เก็บข้อมูล Cloud Storage ดูรายละเอียดในส่วนต่อไปนี้
  2. ยืนยันการย้ายข้อมูลไปยัง Agent บริการ Cloud Firestore

สิทธิ์ของบักเก็ตสำหรับ Service Agent

สำหรับการดำเนินการส่งออกหรือนำเข้าที่ใช้บักเก็ต Cloud Storage ในโปรเจ็กต์อื่น คุณต้องให้สิทธิ์แก่ตัวแทนบริการ Cloud Firestore สำหรับบักเก็ตนั้น ตัวอย่างเช่น การดำเนินการที่ย้ายข้อมูลไปยังโปรเจ็กต์อื่นต้องเข้าถึงที่เก็บข้อมูลในโปรเจ็กต์อื่นนั้น มิฉะนั้น การดำเนินการเหล่านี้จะล้มเหลวหลังจากย้ายข้อมูลไปยัง Service Agent ของ Cloud Firestore

เวิร์กโฟลว์การนำเข้าและส่งออกที่อยู่ในโปรเจ็กต์เดียวกันไม่จำเป็นต้องเปลี่ยนแปลงสิทธิ์ โดยค่าเริ่มต้น Agent บริการ Cloud Firestore จะเข้าถึงที่เก็บข้อมูลในโปรเจ็กต์เดียวกันได้

อัปเดตสิทธิ์สำหรับที่เก็บข้อมูล Cloud Storage จากโปรเจ็กต์อื่นๆ เพื่อให้สิทธิ์เข้าถึงแก่ตัวแทนบริการ service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com มอบบทบาท Firestore Service Agent ให้กับตัวแทนบริการ

บทบาท Firestore Service Agent จะให้สิทธิ์อ่านและสิทธิ์เขียนสำหรับบักเก็ต Cloud Storage หากต้องการให้สิทธิ์อ่านหรือเขียนเท่านั้น ให้ใช้บทบาทที่กำหนดเอง

กระบวนการย้ายข้อมูลที่อธิบายไว้ในส่วนต่อไปนี้จะช่วยคุณระบุบักเก็ต Cloud Storage ที่อาจต้องมีการอัปเดตสิทธิ์

ย้ายข้อมูลโปรเจ็กต์ไปยังตัวแทนบริการ Firestore

ทำตามขั้นตอนต่อไปนี้เพื่อย้ายข้อมูลจากบัญชีบริการ App Engine ไปยัง Agent บริการ Cloud Firestore เมื่อดำเนินการย้ายข้อมูลเสร็จเรียบร้อยแล้วจะยกเลิกไม่ได้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

  4. หากโปรเจ็กต์ยังไม่ได้ย้ายข้อมูลไปยัง Agent บริการ Cloud Firestore คุณจะเห็นแบนเนอร์ที่อธิบายการย้ายข้อมูลและปุ่มตรวจสอบสถานะบักเก็ต ขั้นตอนถัดไปจะช่วยคุณระบุและแก้ไขข้อผิดพลาดเกี่ยวกับสิทธิ์ที่อาจเกิดขึ้น

    คลิกตรวจสอบสถานะที่เก็บข้อมูล

    เมนูจะปรากฏขึ้นพร้อมตัวเลือกในการย้ายข้อมูลให้เสร็จสมบูรณ์และรายการที่เก็บข้อมูล Cloud Storage ระบบอาจใช้เวลาสักครู่ในการโหลดรายการให้เสร็จสมบูรณ์

    รายการนี้รวมถึงบักเก็ตที่ใช้ในการดำเนินการนำเข้าและส่งออกเมื่อเร็วๆ นี้ แต่ปัจจุบันไม่ได้ให้สิทธิ์อ่านและสิทธิ์เขียนแก่ตัวแทนบริการ Cloud Firestore

  5. จดชื่อหลักของ Agent บริการ Cloud Firestore ของโปรเจ็กต์ไว้ ชื่อตัวแทนบริการจะปรากฏใต้ป้ายกำกับตัวแทนบริการที่จะให้สิทธิ์เข้าถึง
  6. สำหรับที่เก็บข้อมูลในรายการที่คุณจะใช้สำหรับการนำเข้าหรือส่งออกในอนาคต ให้ทำตามขั้นตอนต่อไปนี้

    1. คลิกแก้ไขในแถวตารางของที่เก็บข้อมูลนี้ ซึ่งจะเปิดหน้าสิทธิ์ของที่เก็บข้อมูลนั้นในแท็บใหม่

    2. คลิกเพิ่ม
    3. ในช่องผู้ใช้หลักรายใหม่ ให้ป้อนชื่อตัวแทนบริการ Cloud Firestore
    4. ในช่องเลือกบทบาท ให้เลือกตัวแทนบริการ > ตัวแทนบริการ Firestore
    5. คลิกบันทึก
    6. กลับไปที่แท็บที่มีหน้าการนำเข้า/ส่งออกของ Cloud Firestore
    7. ทำขั้นตอนเหล่านี้ซ้ำสำหรับที่เก็บข้อมูลอื่นๆ ในรายการ โปรดดูรายการทุกหน้า
  7. คลิกย้ายข้อมูลไปยัง Agent บริการ Firestore หากยังมีที่เก็บข้อมูลที่ตรวจสอบสิทธิ์ไม่สำเร็จ คุณต้องยืนยันการย้ายข้อมูลโดยคลิกย้ายข้อมูล

    ระบบจะแจ้งเตือนเมื่อการย้ายข้อมูลเสร็จสมบูรณ์ การย้ายข้อมูลจะยกเลิกไม่ได้

ดูสถานะการย้ายข้อมูล

วิธียืนยันสถานะการย้ายข้อมูลของโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
  3. ในเมนูการนำทาง ให้คลิกนำเข้า/ส่งออก

  4. มองหาผู้ใช้หลักข้างป้ายกำกับงานนำเข้า/ส่งออกที่เรียกใช้ในฐานะ

    หากผู้ใช้หลักคือ service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com แสดงว่าโปรเจ็กต์ของคุณย้ายข้อมูลไปยังตัวแทนบริการ Cloud Firestore แล้ว การย้ายข้อมูลจะยกเลิกไม่ได้

    หากยังไม่ได้ย้ายข้อมูลโปรเจ็กต์ แบนเนอร์จะปรากฏที่ด้านบนของหน้าพร้อมปุ่มตรวจสอบสถานะที่เก็บข้อมูล ดูย้ายข้อมูลไปยัง Agent บริการ Firestore เพื่อทำการย้ายข้อมูลให้เสร็จสมบูรณ์

เพิ่มข้อจำกัดของนโยบายทั่วทั้งองค์กร

  • ตั้งค่าข้อจำกัดต่อไปนี้ในนโยบายขององค์กร

    ต้องใช้ Agent บริการ Firestore สำหรับการนำเข้า/ส่งออก (firestore.requireP4SAforImportExport)

    ข้อจำกัดนี้กำหนดให้การดำเนินการนำเข้าและส่งออกต้องใช้ Agent บริการ Cloud Firestore เพื่อให้สิทธิ์คำขอ หากต้องการตั้งค่าข้อจำกัดนี้ โปรดดูหัวข้อ การสร้างและจัดการนโยบายขององค์กร

การใช้ข้อจำกัดนโยบายองค์กรนี้ไม่ได้ให้สิทธิ์ที่เหมาะสมในที่เก็บข้อมูล Cloud Storage แก่ Service Agent ของ Cloud Firestore โดยอัตโนมัติ

หากข้อจำกัดทำให้เกิดข้อผิดพลาดเกี่ยวกับสิทธิ์สำหรับเวิร์กโฟลว์การนำเข้าหรือส่งออก คุณสามารถปิดใช้ข้อจำกัดดังกล่าวเพื่อกลับไปใช้บัญชีบริการเริ่มต้นได้ หลังจากตรวจสอบและอัปเดตสิทธิ์ของที่เก็บข้อมูล Cloud Storage แล้ว คุณจะเปิดใช้ข้อจำกัดอีกครั้งได้