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

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

เวอร์ชัน 1.4.2

ดำเนินการแทรก ค้นหา และอัปเดตในฐานข้อมูล 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 ต่อไปนี้จะดำเนินการค้นหาฐานข้อมูลโดยใช้เนื้อหาของตัวแ2/} แปรในอนุประโยค WHEREpostal.code.value

<?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 ตารางในฐานข้อมูลที่จะแทรกแถว สตริง ไม่มี ได้
แถว แถวที่จะแทรกแสดงเป็นอาร์เรย์ในออบเจ็กต์ JSON rows อาร์เรย์ ไม่มี ได้

การตอบกลับ

ไม่มี

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 ซึ่งสร้างจากไฟล์คีย์บัญชีบริการ ไม่มี ได้