ส่วนขยายฐานข้อมูล Google Cloud Spanner

คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

เวอร์ชัน 2.0.0

ดำเนินการแทรก ค้นหา และอัปเดตในฐานข้อมูล Cloud Spanner

เนื้อหานี้ให้ข้อมูลอ้างอิงสำหรับการกำหนดค่าและการใช้ส่วนขยายนี้ คุณต้องดำเนินการต่อไปนี้ก่อนใช้ส่วนขยายจากพร็อกซี API โดยใช้นโยบาย ExtensionCallout

  1. สร้างอินสแตนซ์ Cloud Spanner ตามที่อธิบายไว้ในการสร้างและจัดการอินสแตนซ์ และสร้างฐานข้อมูล

  2. เมื่อคุณมีอินสแตนซ์และฐานข้อมูลแล้ว ให้ให้สิทธิ์เข้าถึงฐานข้อมูลแก่บัญชีบริการ GCP ที่แสดงถึงส่วนขยาย ดูข้อมูลเพิ่มเติมเกี่ยวกับบทบาทที่จะใช้ได้ที่บทบาทใน Cloud Spanner ดูข้อมูลเพิ่มเติมเกี่ยวกับการควบคุมการเข้าถึง Cloud Spanner ได้ที่การใช้บทบาท IAM และการควบคุมการเข้าถึง Cloud Spanner

  3. เมื่อคุณมีบัญชีบริการที่มีสิทธิ์เข้าถึงฐานข้อมูลในระดับที่ต้องการแล้ว ให้ใช้คอนโซล GCP เพื่อสร้างคีย์สําหรับบัญชีบริการ ใช้เนื้อหาของไฟล์ JSON ของคีย์ที่ได้เมื่อคุณกําหนดค่าส่วนขยายนี้

  4. ใช้เนื้อหาของไฟล์คีย์ JSON ที่ได้เมื่อเพิ่มและกําหนดค่าส่วนขยายโดยใช้ข้อมูลอ้างอิงการกําหนดค่า

เกี่ยวกับ Cloud Spanner

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

หากคุณเพิ่งเริ่มต้นใช้งาน Cloud Spanner โปรดดูการเริ่มต้นใช้งานในเอกสารประกอบของ Cloud Spanner

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีกำหนดค่าการรองรับการดำเนินการของส่วนขยาย Cloud Spanner โดยใช้นโยบาย ExtensionCallout

เพิ่มข้อมูล

ในตัวอย่างนี้ การดำเนินการ insert ของส่วนขยายจะเพิ่มผู้ใช้ใหม่ลงในตารางผู้ใช้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Insert-New-User">
    <DisplayName>Insert New User</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>insert</Action>
    <Input><![CDATA[{
        "tableName" : "user",
        "rows" : [{
          "username": "jonesy42",
          "firstName": "Floyd",
          "lastName": "Jones",
          "address": "3695 Auctor Street",
          "city": "Gresham",
          "region": "OR",
          "postalCode": "12693",
          "email": "floydster@example.com"
      }]
  }]]></Input>
</ConnectorCallout>

รับข้อมูล

ในตัวอย่างนี้ การค้นหาจะดึงค่าชื่อผู้ใช้และอีเมลจากตาราง user

ขั้นแรก นโยบาย AssignMessage จะกําหนดตัวแปร postal.code.value เพื่อใช้ในคำสั่ง WHERE ของข้อความค้นหา ตัวอย่าง นโยบายของคุณอาจตั้งค่าตามพารามิเตอร์คําขอของไคลเอ็นต์

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Postal-Code">
    <AssignTo createNew="true" transport="http" type="request"/>
    <AssignVariable>
        <Name>postal.code</Name>
        <Value>86519</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

นโยบาย ExtensionCallout ต่อไปนี้จะดำเนินการค้นหาฐานข้อมูลโดยใช้เนื้อหาของตัวแปร postal.code.value ในประโยค WHERE

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-User-Data">
    <DisplayName>Get User Data</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>querySQL</Action>
    <Input><![CDATA[{
      "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
      "params" : {
        "postalCode" : "{postal.code.value}"
      }
    }]]></Input>
  <Output>spanner.userdata.retrieved</Output>
</ConnectorCallout>

จากนั้นนโยบาย AssignMessage ต่อไปนี้จะใช้คำตอบของส่วนขยายซึ่งจัดเก็บไว้ในตัวแปร spanner.userdata.retrieved เป็นคำตอบที่ส่งกลับไปยังไคลเอ็นต์

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Query-Response-Data">
    <DisplayName>Get Query Response Data</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{spanner.userdata.retrieved}</Payload>
    </Set>
</AssignMessage>

ในตัวอย่างนี้ ระบบจะแสดงผลข้อมูลการตอบกลับเป็น JSON ดังต่อไปนี้

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

อัปเดตข้อมูล

ในตัวอย่างนี้ องค์ประกอบ <Input> มี username ซึ่งเป็นคีย์หลักของตาราง และค่าใหม่สำหรับคอลัมน์ email

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Update-User-Data">
    <DisplayName>Update User Data</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>update</Action>
    <Input><![CDATA[{
        "tableName" : "user",
        "rows": [{
            "username":"Liz456",
            "email":"lizzard@example.com"
        }]
    }]]></Input>
</ConnectorCallout>

การทำงาน

Insert

แทรกแถวที่ระบุลงในฐานข้อมูล

ไวยากรณ์

<Action>insert</Action>
<Input><![CDATA[{
  "tableName" : "table-to-insert-into",
  "rows" : "rows-to-insert"
}]]></Input>

ตัวอย่าง

ในตัวอย่างนี้ การดำเนินการ insert ของส่วนขยายจะเพิ่มผู้ใช้ใหม่ลงในตารางผู้ใช้ ระบบจะเพิ่มแถว 1 แถว

<Action>insert</Action>
<Input><![CDATA[{
    "tableName" : "user",
    "rows" : [{
      "username": "jonesy42",
      "firstName": "Floyd",
      "lastName": "Jones",
      "address": "3695 Auctor Street",
      "city": "Gresham",
      "region": "OR",
      "postalCode": "12693",
      "email": "floydster@example.com"
  }]
}]]></Input>

พารามิเตอร์คำขอ

พารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น ต้องระบุ
tableName ตารางในฐานข้อมูลที่ควรแทรกแถว สตริง ไม่มี ได้
แถว แถวที่จะแทรกซึ่งแสดงเป็นอาร์เรย์ในออบเจ็กต์ rows JSON อาร์เรย์ ไม่มี ได้

การตอบกลับ

ไม่มี

querySQL

ค้นหาฐานข้อมูลโดยใช้คำสั่ง SQL ที่มีพารามิเตอร์ที่ระบุ พารามิเตอร์จะระบุไว้ในคำสั่ง SQL ที่มีชื่อนำหน้าด้วย @ โดยค่าพารามิเตอร์จะระบุไว้ในพารามิเตอร์ params ของการดำเนินการนี้

ดูรายละเอียดเกี่ยวกับไวยากรณ์การค้นหาของ Cloud Spanner ได้ที่ไวยากรณ์การค้นหา

ไวยากรณ์

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "sql-query-statement",
  "params" : {
    "param1" : "columnValue"
  }
}]]></Input>

ตัวอย่าง

ในตัวอย่างนี้ คําค้นหาจะดึงค่าคอลัมน์ username และ email จากตาราง user คำสั่ง SQL ระบุพารามิเตอร์ postalCode ที่ตั้งค่าจากตัวแปรโฟลว์ postal.code.value

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
  "params" : {
    "postalCode" : "{postal.code.value}"
  }
}]]></Input>

พารามิเตอร์คำขอ

พารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น ต้องระบุ
sql การค้นหา SQL ที่จะดำเนินการ คุณสามารถระบุพารามิเตอร์ด้วยชื่อพารามิเตอร์ที่ขึ้นต้นด้วย @ ชื่อพารามิเตอร์เหล่านั้นต้องสอดคล้องกับคีย์ในพารามิเตอร์ params ของการดำเนินการนี้ สตริง ไม่มี ได้
params ออบเจ็กต์ที่คีย์และค่าคือชื่อและค่าพารามิเตอร์ที่ใช้ในการค้นหา SQL คุณสามารถระบุพารามิเตอร์หลายรายการได้ที่นี่ วัตถุ ไม่มี ไม่

การตอบกลับ

ออบเจ็กต์ rows ที่มีอาร์เรย์ของคู่ชื่อ-ค่าของคอลัมน์ที่การค้นหาแสดงผล เช่น

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

อัปเดต

อัปเดตแถวในฐานข้อมูลด้วยข้อมูลที่ระบุ

ไวยากรณ์

<Input><![CDATA[{
  "tableName" : "table-with-rows-to-update",
  "rows" : "rows-to-update"
}]]></Input>

ตัวอย่าง

ในตัวอย่างนี้ ระบบจะอัปเดตอีเมลของผู้ใช้ที่มี username เป็น Liz456 ด้วยค่าใหม่ ระบบจะอัปเดต 1 แถว

<Action>update</Action>
<Input><![CDATA[{
  "tableName" : "user",
  "rows": [{
      "username":"Liz456",
      "email":"lizzard@example.com"
  }]
}]]></Input>

พารามิเตอร์คำขอ

พารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น ต้องระบุ
tableName ตารางในฐานข้อมูลที่ควรอัปเดตแถว สตริง ไม่มี ได้
แถว อาร์เรย์ของข้อมูลแถวที่จะอัปเดต เอนทิตีแต่ละรายการในอาร์เรย์ควรมีค่ารหัสที่ไม่ซ้ำกัน (เช่น รหัสหลัก) สำหรับแถวที่จะอัปเดต อาร์เรย์ ไม่มี ได้

การตอบกลับ

ไม่มี

ข้อมูลอ้างอิงการกําหนดค่า

ใช้ข้อมูลต่อไปนี้เมื่อกําหนดค่าและติดตั้งใช้งานส่วนขยายนี้เพื่อใช้ในพร็อกซี API ดูขั้นตอนการกำหนดค่าส่วนขยายโดยใช้คอนโซล Apigee ได้ที่การเพิ่มและกําหนดค่าส่วนขยาย

พร็อพเพอร์ตี้ส่วนขยายทั่วไป

พร็อพเพอร์ตี้ต่อไปนี้มีอยู่ในส่วนขยายทุกรายการ

พร็อพเพอร์ตี้ คำอธิบาย ค่าเริ่มต้น ต้องระบุ
name ชื่อที่คุณกําหนดให้การกําหนดค่านี้ของส่วนขยาย ไม่มี ได้
packageName ชื่อแพ็กเกจส่วนขยายที่ระบุโดย Apigee Edge ไม่มี ได้
version หมายเลขเวอร์ชันของแพ็กเกจส่วนขยายที่คุณกําหนดค่าส่วนขยาย ไม่มี ได้
configuration ค่าการกําหนดค่าเฉพาะสําหรับส่วนขยายที่คุณกําลังเพิ่ม ดูพร็อพเพอร์ตี้สําหรับแพ็กเกจส่วนขยายนี้ ไม่มี ได้

พร็อพเพอร์ตี้ของแพ็กเกจส่วนขยายนี้

ระบุค่าสำหรับพร็อพเพอร์ตี้การกําหนดค่าต่อไปนี้ที่เจาะจงสําหรับส่วนขยายนี้

พร็อพเพอร์ตี้ คำอธิบาย ค่าเริ่มต้น ต้องระบุ
projectId รหัสของโปรเจ็กต์ GCP ที่มีฐานข้อมูล ไม่มี ได้
instanceId รหัสของอินสแตนซ์ Cloud Spanner ในโปรเจ็กต์ GCP ไม่มี ได้
databaseId รหัสของฐานข้อมูล Cloud Spanner ไม่มี ได้
ข้อมูลเข้าสู่ระบบ เมื่อป้อนในคอนโซล Apigee Edge เนื้อหาของไฟล์คีย์บัญชีบริการจะมีลักษณะดังนี้ เมื่อส่งผ่าน Management API ค่าจะเป็นค่าที่เข้ารหัส Base64 ที่สร้างขึ้นจากไฟล์คีย์ของบัญชีบริการ ไม่มี ได้