ไปป์ไลน์ของฉันเป็นดังนี้:
Firehose -> Lambda (Java SDK ของ AWS) -> (S3 และ Redshift)
ส่งบันทึก JSON ที่ไม่ได้เข้ารหัส (ดิบ) ไปยัง Firehose จากนั้นจะทริกเกอร์ฟังก์ชัน Lambda ซึ่งจะแปลงฟังก์ชันเล็กน้อย จากนั้น Firehose จะใส่บันทึกที่แปลงแล้วลงในบัคเก็ต S3 และลงใน Redshift
เพื่อให้ Firehose เพิ่มข้อมูลที่แปลงแล้วไปยัง S3 ข้อมูลนั้นจะต้องเข้ารหัส Base64 (และ Firehose จะถอดรหัสก่อนที่จะเพิ่มลงใน S3)
อย่างไรก็ตาม ฉันมี URL ภายในข้อมูลที่เมื่อถอดรหัสแล้ว อักขระ =
ตัวจะถูกแทนที่ด้วยอักขระ Unicode ที่เทียบเท่ากัน (\u003d
) เนื่องจากเป็นอักขระที่ตัวถอดรหัส Base64 ของ Amazon ใช้เป็นช่องว่างภายใน
https://www.[snipped].com/...?returnurl=null&ผู้อ้างอิง=null
ฉันจะเก็บอักขระ =
เหล่านั้นไว้ในข้อมูลที่ถอดรหัสได้อย่างไร
หมายเหตุ: ฉันได้ลองใช้ Base64.getUrlEncoder()
แล้ว แต่ดูเหมือนว่า AWS จะรองรับเฉพาะ Base64.getEncoder()
เท่านั้น
=
ด้วย\u003d
สิ่งที่น่าสนใจคือบันทึก S3 ได้ถูกเพิ่มไปยัง Redshift ผ่าน Firehose ด้วย และ Redshift ไม่ แสดงอักขระ=
- person Jacob G.   schedule 18.07.2018\u003d
ไม่เทียบเท่ากับ=
ในไฟล์ข้อความ utf-8 แต่อยู่ใน JSON และแน่นอนว่าอินเทอร์เฟซของ Lambda จะเป็น JSON เสมอ (แม้ว่าจะไม่เกี่ยวข้องหากข้อมูลเข้าและออกจะแสดงใน base64 เสมอ) ฉันไม่เข้าใจการตั้งค่าของคุณดีพอที่จะรู้ว่านี่เป็นการคาดเดาที่มีประโยชน์ในส่วนของฉันหรือไม่ - person Michael - sqlbot   schedule 18.07.2018