How to decode ion_binary of Amazon QLDB in ruby

萝らか妹 提交于 2020-06-17 00:51:30

问题


I was playing with QLDB of Amazon with ruby and used the aws-sdk-qldb and aws-sdk-qldbsession gem. I was getting result as IonBinary. But not able to decode and parse it.

Following is the code


      cred = Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY'])

      qldb_session_client = Aws::QLDBSession::Client.new(region: 'ap-southeast-1', credentials: cred)

      start_session_req = Aws::QLDBSession::Types::StartSessionRequest.new
      start_session_req.ledger_name = 'ledger-test'


      command_request = Aws::QLDBSession::Types::SendCommandRequest.new

      command_request.start_session = start_session_req

      resp = qldb_session_client.send_command(command_request)
      session_token = resp.start_session.session_token

      command_request = Aws::QLDBSession::Types::SendCommandRequest.new
      command_request.session_token = session_token
      command_request.start_transaction = Aws::QLDBSession::Types::StartTransactionRequest.new
      resp = qldb_session_client.send_command(command_request)
      transaction_id = resp.start_transaction.transaction_id

      command_request = Aws::QLDBSession::Types::SendCommandRequest.new
      command_request.session_token = session_token
      command_request.execute_statement = Aws::QLDBSession::Types::ExecuteStatementRequest.new
      command_request.execute_statement.transaction_id = transaction_id
      command_request.execute_statement.statement = 'select * from testing'

      resp = qldb_session_client.send_command(command_request)


now if I use the following code

resp.execute_statement.first_page.values[0]

I get

{:ion_binary=>"\xE0\x01\x00\xEA\xEE\x9A\x81\x83\xDE\x96\x87\xBE\x93\x89firstname\x88lastname\xDE\x9D\x8A\x8Dtesting first\x8B\x8Ctesting last", :ion_text=>"[FILTERED]"}

I am not able to decode this ion_binary using binary parser.


回答1:


Decoding the stream is likely to be done with Aws::EventStream::Decoder#decode. That said, somewhat like below should work.

Aws::EventStream::Decoder.new.decode(
  StringIO.new(result[:ion_binary])
)


来源:https://stackoverflow.com/questions/59372092/how-to-decode-ion-binary-of-amazon-qldb-in-ruby

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!