That is exactly what I need. I had assumed that the session is limited to authentication layer and it is not respected by the queries, I'm glad I was wrong.
I also tried your solution without the authentication but no persistent session is created without going through auth. Thanks John, Payam On 2016-05-04, 3:57 AM, "John Omernik" <[email protected]> wrote: >The rest api works great with session variables, and it works in the >current version of Drill. The key is you need to have a session created >within your web requests. Here is an example using Python and the >requests >module. Fairly straightforward. I am not sure how requests works without >auth enabled, however, it may create a session cookie even without Auth, >so >if you are not using authentication, just try commenting out the s = >authDrill(s) line and see if it works. > >Let me know if you have any questions. > >John > > >#!/usr/bin/python > >import requests >import json >import sys >import os > >drill_base_url = "https://drillbit.local:8047" > >drill_user = "username" >drill_pass = "password" > >print "Drill Rest Endpoint: %s" % (drill_base_url) > >def main(): > s = requests.Session() # Create a session object > s = authDrill(s) # Authenticate to Drill > > r = runQuery(s, "ALTER SESSION set `store.json.all_text_mode` = true") > result = runQuery(s, "CREATE TABLE your_new_table as select >your_fields >from your_src_table where something = somethingelse") > > print r.text > > if result.status_code == 200: > print "Load Successful" > else: > print "Error encountered: %s" % result.status_code > >def runQuery(s, drill): > url = drill_base_url + "/query.json" > payload = {"queryType":"SQL", "query":drill} > headers = {"Content-type": "application/json"} > r = s.post(url, data=json.dumps(payload), headers=headers, >verify=False) > > return r >def authDrill(s): > > url = drill_base_url + "/j_security_check" > > login = {'j_username': drill_user, 'j_password': drill_pass} > > r = s.post(url, data=login, verify=False) > > if r.status_code == 200: > if r.text.find("Invalid username/password credentials") >= 0: > print "Authentication Failed - Please check Secrets - Exiting" > sys.exit(1) > elif r.text.find("Number of Drill Bits") >= 0: > print "Authentication successful" > else: > print "Unknown Response Code 200 - Exiting" > print r.text > sys.exit(1) > else: > print "Non HTTP-200 returned - Unknown Error - Exiting" > print "HTTP Code: %s" % r.status_code > print r.text > sys.exit(1) > > return s > >if __name__ == '__main__': > main() > >On Tue, May 3, 2016 at 11:51 PM, Tomer Shiran <[email protected]> wrote: > >> Actually, there's no reason Drill can't support session variables >>through a >> URL parameter or cookie. I am not sure if it's currently supported >>through. >> >> On Tue, May 3, 2016 at 9:11 PM, Abhishek Girish >><[email protected] >> > >> wrote: >> >> > From my limited knowledge, I believe this is not supported by design. >> Refer >> > to >> https://en.wikipedia.org/wiki/Representational_state_transfer#Stateless >> > >> > On Tue, May 3, 2016 at 2:47 PM, Payam Sabzmeydani <[email protected]> >> wrote: >> > >> > > Hi all, >> > > >> > > I was wondering if there is a way to change session options (ALTER >> > > SESSION) when using the REST API to query Drill? >> > > >> > > Thanks, >> > > Payam >> > > >> > >>
