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

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

เวอร์ชัน 2.0.2

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

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

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

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

  3. เมื่อมีบัญชีบริการที่มีสิทธิ์สำหรับระดับการเข้าถึงฐานข้อมูลที่ต้องการแล้ว ให้ใช้คอนโซล Google Cloud เพื่อสร้างคีย์สำหรับบัญชีบริการ ใช้เนื้อหาของไฟล์ 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 policy จะกำหนดตัวแปร 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>

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

พารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น ต้องระบุ
ชื่อตาราง ตารางในฐานข้อมูลที่ควรแทรกแถว สตริง ไม่มี ได้
แถว แถวที่จะแทรกแสดงเป็นอาร์เรย์ใน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พารามิเตอร์ของการดำเนินการนี้ สตริง ไม่มี ได้
พารามิเตอร์ ออบเจ็กต์ที่มีคีย์และค่าเป็นชื่อพารามิเตอร์และค่าที่ใช้ในการค้นหา 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>

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

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

การตอบกลับ

ไม่มี

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

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

คุณสมบัติส่วนขยายทั่วไป

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

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

พร็อพเพอร์ตี้สำหรับแพ็กเกจส่วนขยายนี้

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

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