You can use the Looker API to create a data dictionary based on the definitions and descriptions of fields defined in the Looker modeling layer. Creating a data dictionary can be useful for:
- Creating a reference source for all consumers of external reports.
- Providing a location for business users to search all metrics descriptions to identify the appropriate dimension or measure for analysis.
- Making it easy for external stakeholders to identify and locate the unique metrics for their business.
- Auditing LookML models to assess whether consistent naming conventions are followed, whether there are redundant fields, or if fields are annotated with descriptions.
Step 1:
Authenticate into the API following the steps outlined in the Authentication with an SDK section of the Looker API Authentication documentation.
Step 2:
Define fields with descriptions and other parameters within the model in your Looker instance.
Step 3:
Call the lookML_model_explore
endpoint via the API and pull in the appropriate fields you want to identify within your data dictionary.
Here is a sample Ruby code that puts the above steps all together:
#Get Data Dictionary require 'looker-sdk' module ApplicationHelper def self.api_auth sdk = LookerSDK::Client.new( # Looker/API Credentials :client_id => ENV['API_CLIENT_ID'], :client_secret => ENV['API_SECRET'], :api_endpoint => ENV['API_ENDPOINT'] ) return sdk end def self.get_field_values(model_name, explore_name) sdk = self.api_auth() fields = {:fields => 'id, name, description, fields'} #API Call to pull in metadata about fields in a particular explore fields = sdk.lookml_model_explore(model_name, explore_name, fields) my_fields = [] #Iterate through the field definitions and pull in the description, sql, and other looker tags you might want to include in your data dictionary. fields[:fields][:dimensions].to_a.each do |x| dimension = { :field_type => 'Dimension', :view_name => x[:view_label].to_s, :field_name => x[:label_short].to_s, :type => x[:type].to_s, :description => x[:description].to_s, :sql => x[:sql].to_s } my_fields << dimension end fields[:fields][:measures].to_a.each do |x| measure = { :field_type => 'Measure', :view_name => x[:view_label].to_s, :field_name => x[:label_short].to_s, :type => x[:type].to_s, :description => x[:description].to_s, :sql => x[:sql].to_s } my_fields << measure end return my_fields end end
Step 4:
Format the results from the get_field_values
call. Consider using plugins to allow for search and sort functionality. In our example, we use the DataTable JS plugin.
Examples:
Default Dictionary with Pagination and Sorts:
Dictionary Filtered to Fields that Contain the Word lifetime
:
Additional information on data dictionaries combining the API and Python to output a data dictionary to .csv can be found here in the Community post Writing a Simple Data Dictionary to CSV Using the Looker API and the Python requests library. Another example for using the API to output a data dictionary to Google Sheets can be found in the Help Center article Generating a Data Dictionary in Google Sheets.