Created on 10-26-2015 11:09 PM
Sharing source code I wrote to a prospect that wants to try Phoenix + .NET.
It's a simple code that POST the query to Phoenix Server and parse result JSON and prints results on console:
using System; using System.Net; using System.Collections.Generic; using Newtonsoft.Json; using System.Text; namespace ConsoleApplication1 { class PhoenixSample { public class FirstFrame { public String offset; public List<List<String>> rows; } public class Result { public FirstFrame firstFrame; public int updateCount; } public class PhoenixResult { public string response { get; set; } public List<Result> results { get; set; } } static void Main(string[] args) { try { string url = "http://192.168.56.203:8765"; string query = "select * from test"; var syncClient = new WebClient(); syncClient.Headers["request"] = "{\"request\":\"prepareAndExecute\",\"connectionId\":\"b27cbc83-a514-49f0-9bbe-f15d8bfb3532\",\"sql\":\"" + query + "\",\"maxRowCount\":-1}"; syncClient.Headers["Content-Type"] = "application/json"; byte[] responseArray = syncClient.UploadData(url, "POST", Encoding.ASCII.GetBytes("")); string json = Encoding.ASCII.GetString(responseArray); System.Diagnostics.Debug.WriteLine("teste"); System.Diagnostics.Debug.WriteLine("json=" + json); PhoenixResult test = JsonConvert.DeserializeObject<PhoenixResult>(json); System.Diagnostics.Debug.WriteLine(test.response); System.Diagnostics.Debug.WriteLine(test.results[0].updateCount); for (int i = 0; i < test.results[0].firstFrame.rows.Count; i++) { for (int j = 0; j < test.results[0].firstFrame.rows[i].Count; j++) { System.Diagnostics.Debug.Write("row # " + i + " col # " + j + " = "); System.Diagnostics.Debug.WriteLine(test.results[0].firstFrame.rows[i][j]); } } } catch (Exception e) { Console.WriteLine(e.Message); Console.Read(); } } } }
Created on 10-28-2015 12:17 AM
Nice! I had made something similar a few months back so this might be my opportunity to share that as well https://github.com/jdye64/PhoenixRESTServer-Client
Created on 08-25-2016 01:05 AM
Microsoft released a preview of their .NET ProtoBuf client for Phoenix (hdinsight-phoenix-sharp) on Nuget.org in June 2016. I've found it worked well against my HDP 2.4 (HBASE 1.1.2 / Phoenix 4.4) cluster, but the API was unfamiliar to me. As I learned it, I implemented a System.Data IDbConnection, IDbCommand et al wrapper API around it, named Garuda.Data. It makes access to Phoenix from .NET code feel almost like SqlConnection, SqlCommand, etc - Check it out on Nuget: https://www.nuget.org/packages/Garuda.Data/
Blog post on the topic: http://dwdii.github.io/2016/08/13/Garuda.Data-Apache-Phoenix-For-.NET-Developers.html
Garuda.Data Github Repo: https://github.com/dwdii/GarudaUtil