WEBVTT 00:00:10.960 --> 00:00:16.490 Jaql is a loosely typed functional language, with lazy evaluation. It's part of BigInsights, 00:00:16.490 --> 00:00:20.200 IBM's Hadoop based Big Data platform. 00:00:20.200 --> 00:00:25.259 The initial inspiration for Jaql was a JSON Query Language that provided query processing 00:00:25.259 --> 00:00:30.470 for semi-structured data, particularly nested data represented using the Jaql Data Model 00:00:30.470 --> 00:00:32.829 or JDM 00:00:32.829 --> 00:00:38.559 The JDM is a superset of JSON, a standard data model, that is similar to XML but much 00:00:38.559 --> 00:00:40.649 easier to work with. 00:00:40.649 --> 00:00:47.039 Jaql provides a complete solution environment and integration point for all the data storage, 00:00:47.039 --> 00:00:53.910 functions and capabilities of BigInsights; including flexible access to data and analytics. 00:00:53.910 --> 00:00:59.510 Jaql is the functional language that glues it all together. 00:00:59.510 --> 00:01:05.800 It also provides ways to reach out to external data and services such as relational databases, 00:01:05.800 --> 00:01:10.909 indexing services, text analytics, machine learning and so on. 00:01:10.909 --> 00:01:16.200 Jaql provides an elegant programming model for developing complex and reusable queries 00:01:16.200 --> 00:01:22.460 and transformations against JSON data structures; even very deeply nested data structures. 00:01:22.460 --> 00:01:28.799 As with SQL, Jaql is a declarative query language so you focus on what you want to achieve, 00:01:28.799 --> 00:01:31.469 not how it's done. 00:01:31.469 --> 00:01:37.829 Under the hood, Jaql automatically exploits the massive parallelism of MapReduce. You 00:01:37.829 --> 00:01:42.380 don't have to worry about the complexities of MapReduce programming. 00:01:42.380 --> 00:01:48.670 Jaql is an extensible language. It provides native functions and modules, that allow you 00:01:48.670 --> 00:01:54.500 to build up packages of re-usable logic that can be shared throughout your environment. 00:01:54.500 --> 00:01:59.810 So, when would you choose Jaql instead of another language? 00:01:59.810 --> 00:02:06.810 1. Jaql is a good choice when your data is deeply nested, representing complex relationships. 00:02:08.258 --> 00:02:14.840 Jaql can work with arbitrarily nested data and can even handle data that varies in structure 00:02:14.840 --> 00:02:17.370 and content from record to record. 00:02:17.370 --> 00:02:23.220 2. Jaql is a good choice when you need to combine programming models because it offers 00:02:23.220 --> 00:02:30.150 both the core Jaql syntax and you can embed SQL within your Jaql – that's like combining 00:02:30.150 --> 00:02:32.710 Hive and Pig together into one language 00:02:32.710 --> 00:02:39.710 3. Jaql is a good choice when you need a modular language that lets you write native functions. 00:02:40.270 --> 00:02:46.410 You can parameterize and encapsulate any functionality of the language. and then package those functions 00:02:46.410 --> 00:02:51.100 into reusable modules to be shared across all of your applications. 00:02:51.100 --> 00:02:58.100 4. Jaql is also a good choice when you need a full programming language with both flow-control 00:02:58.680 --> 00:03:04.320 and native functions and modules. You can develop full programs from the ground up using 00:03:04.320 --> 00:03:09.410 JAQL without requiring the use of another programming language to orchestrate your logic, 00:03:09.410 --> 00:03:16.410 which is particularly important for data flows.