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

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

เวอร์ชัน 1.4.1

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

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

  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 โดยใช้นโยบาย Extension callout

เพิ่มข้อมูล

ในตัวอย่างต่อไปนี้ การดำเนินการ 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>

นโยบาย ExtensionExtension ต่อไปนี้จะดำเนินการค้นหากับฐานข้อมูล โดยใช้เนื้อหาของตัวแปร 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>

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

พารามิเตอร์ คำอธิบาย Type ค่าเริ่มต้น จำเป็น
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>

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

พารามิเตอร์ คำอธิบาย Type ค่าเริ่มต้น จำเป็น
sql การค้นหา SQL ที่จะดำเนินการ คุณสามารถระบุพารามิเตอร์ที่มีชื่อพารามิเตอร์ @-prepended ได้ ชื่อพารามิเตอร์ดังกล่าวต้องตรงกับคีย์ในพารามิเตอร์ 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>

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

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

คำตอบ

ไม่มี

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

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

คุณสมบัติส่วนขยายที่พบบ่อย

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

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

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

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

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