Azure Data Factory copy nested JSON to SQL table - json

Does anyone have an easy way to convert nested JSON to a flat SQL table? Just want to repeat the higher level data on each of the lower level detail. It looks like it can be done in mapping, I have tried as per the MS documentation but got a table full of NULL. Here is what I have tried and the result.
json
Option 1
Result: Only returns the first record of the ‘assignedLicences’
Option1
Option 2:
Returns multiple ‘assignedLicenses’ for each user, but only returns the first user id in each page.
Option2
Option3: as per the MS documentation
Result: returns all NULL values
Option3

You can have a try:
1.click import schemas button
2.if you have a JsonArray,select it.
3.you can directly see and edit the fields' JSON paths by opening Advanced editor .
Here is a Microsoft documentation about it.Please refer to this.
Hope this can help you.

Related

Advanced mapping of JSON in Azure Data Factory - some guidance requested

I'm trying to map a JSON document (sensor data) into a more meaningful representation using Mapping Dataflows. However, hard time getting this to work and would really appreciate some insight/recommendations on how to solve the following:
The input is
What I would like to end up with is the following:
Any pointers as to how this can be implemented are more than welcome.
This can be accomplished using the Copy activity and then split function in Derived Column transformation in Azure Data Factory.
Use the copy activity to read the JSON file as source and in sink, use SQL database to store the data as table. In Mapping tab, Import the schema and map the JSON records to the corresponding column names. Refer this third-part tutorial for guidance - https://sqlkover.com/dynamically-map-json-to-sql-in-azure-data-factory/
Finally, use the Data Flow activity and choose the SQL table as source now which you have used as sink above.
Select the Derived Column transformation.
Use split function.
Add the column which will take the split values which you want to split as shown below.
Use split(<column_name_to_split>, '_') function to split the column on with _ delimiter. Change <column_name_to_split> to the name of column you cant to split. Refer image below.
Preview the data to check the result.

Best way to parse a big and intricated Json file with OpenRefine (or R)

I know how to parse json cells in Open refine, but this one is too tricky for me.
I've used an API to extract the calendar of 4730 AirBNB's rooms, identified by their IDs.
Here is an example of one Json file : https://fr.airbnb.com/api/v2/calendar_months?key=d306zoyjsyarp7ifhu67rjxn52tv0t20&currency=EUR&locale=fr&listing_id=4212133&month=11&year=2016&count=12&_format=with_conditions
For each ID and each day of the year from now until november 2017, i would like to extract the availability of this rooms (true or false) and its price at this day.
I can't figure out how to parse out these informations. I guess that it implies a series of nested forEach, but i can't find the right way to do this with Open Refine.
I've tried, of course,
forEach(value.parseJson().calendar_months, e, e.days)
The result is an array of arrays of dictionnaries that disrupts me.
Any help would be appreciate. If the operation is too difficult in Open Refine, a solution with R (or Python) would also be fine for me.
Rather than just creating your Project as text, and working with GREL to parse out...
The best way is just select the JSON record part that you want to work with using our visual importer wizard for JSON files and XML files (you can even use a URL pointing to a JSON file as in your example). (A video tutorial shows how here: https://www.youtube.com/watch?v=vUxdB-nl0Bw )
Select the JSON part that contains your records that you want to parse and work with (this can be any repeating part, just select one of them and OpenRefine will extract all the rest)
Limit the amount of data rows that you want to load in during creation, or leave default of all rows.
Click Create Project and now your in Rows mode. However if you think that Records mode might be better suited for context, just import the project again as JSON and then select the next outside area of the content, perhaps a larger array that contains a key field, etc. In the example, the key field would probably be the Date, and why I highlight the whole record for a given date. This way OpenRefine will have Keys for each record and Records mode lets you work with them better than Row mode.
Feel free to take this example and make it better and even more helpful for all , add it to our Wiki section on How to Use
I think you are on the right track. The output of:
forEach(value.parseJson().calendar_months, e, e.days)
is hard to read because OpenRefine and JSON both use square brackets to indicate arrays. What you are getting from this expression is an OR array containing twelve items (one for each month of the year). The items in the OR array are JSON - each one an array of days in the month.
To keep the steps manageable I'd suggest tackling it like this:
First use
forEach(value.parseJson().calendar_months,m,m.days).join("|")
You have to use 'join' because OR can't store OR arrays directly in a cell - it has to be a string.
Then use "Edit Cells->Split multi-valued cells" - this will get you 12 rows per ID, each containing a JSON expression. Now for each ID you have 12 rows in OR
Then use:
forEach(value.parseJson(),d,d).join("|")
This splits the JSON down into the individual days
Then use "Edit Cells->Split multi-valued cells" again to split the details for each day into its own cell.
Using the JSON from example URL above - this gives me 441 rows for the single ID - each contains the JSON describing the availability & price for a single day. At this point you can use the 'fill down' function on the ID column to fill in the ID for each of the rows.
You've now got some pretty easy JSON in each cell - so you can extract availability using
value.parseJson().available
etc.

Power BI and JSON data

Is it possible to make Power BI read JSON data? I've spent an entire day yesterday to figure out how to convert the JSON data into a readable table in Power Bi, but with no luck.
I tried googling for hours, but there is no proper documentation anywhere.
I'm retrieving a JSON payload from my website and when I try to import, it shows the data like this:
Record
Record
Record
Record
Maybe there are any tutorials I can follow? Or perhaps another alternative to Power BI that would properly read and structure my JSON data?
As mentioned in comments, just besides each Record (if headers), are you able to see any small box with two arrows, try clicking it.
This Answer may help now..
First We have to convert this to table ->Click on the Icon in top left corner
Properties window will open. dont change anything Click on Ok.Now you can see the list converted to Column.
There is an arrow icon in the column -> Click on it
Main Step :In the property window uncheck "use original column name as prefix"
Here we go You can now use this result !
Refer Below Links :
https://www.mssqltips.com/sqlservertip/4621/using-power-bi-with-json-data-sources-and-files/
https://www.dutchdatadude.com/loading-multiple-json-files-using-power-query/
Retrieving data from a .json file brings in 'Records'. Each row of data is returned as a 'Record' which is a List. Each record in 'Records' is a hyperlink that opens the row elements. You could convert the 'Records' into a table, but you get a Table with a single column which has all the records with each record a row from the original JSON data.
Here is a link to few more details:
http://hodentekmsss.blogspot.com/2016/11/retrieving-json-data-in-power-bi.html

Liferay: how to get ddmContentModel by json-ws

I've managed to get the ddl structure by
http://localhost:8090/api/jsonws/ddmstructure/get-structures/group-id/10184
To get the param groupId I've used:
http://localhost:8090/api/jsonws/group/get-user-group/company-id/10157/user-id/10639
To find the userId:
http://localhost:8090/api/jsonws/user/get-user-by-email-address/company-id/10157/email-address/test%40liferay.com
The companyId is from:
http://localhost:8090/api/jsonws/company/get-company-by-virtual-host/virtual-host/localhost
Please, could you point me to any resources describing the Json web service in more details.
I didn't find any docs the defines the form of the orderByComparator /ddlrecordset/search.
I would like to get the content of the dynamical list. I've found that data is contained in ddmcontent table - corresponding java file is \portal-service\src\com\liferay\portlet\dynamicdatamapping\model\DDMContentModel.java. How to do that?
I would appreciate any help. Thanks.
Take a look at the below articles: The second one uses the skinny JSON provider to get the list of DDL records from a DDL Record Set
https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/json-web-services
https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/invoking-services-using-skinny-json-provider

Viewing Results which are not Output to a Destination

When developing a Data Flow I don't always want to output the results to a destination - but I would like to see the data.
Is there a way to attach a Data viewer to an output without having to have a destination?
The file and raw destination have limitations on the data type they accept - and I don't want to attach conversions just to test/build code.
Is there some kind of output to null ? i could then get a data view on the result set
There is a (free) custom "trash" destination available from a third party:
http://www.sqlis.com/post/Trash-Destination-Adapter.aspx
I usually use Export column transform - if left with default configuration, it does nothing, so it is equivalent to the custom "Trash" destination mentioned by Ed, but you don't have to install anything.
When debugging and wanting to view the data in the buffer, I usually throw in a Union All and connect it below the component who's output I want to see. Then add a Data Viewer on the connector and voila, there it is!
There isn't really. You can use a RecordSet Destination, or a Row Count transform instead.