def column_to_dimension(col): if col['LOOKER_TYPE'] == 'time': tmpDim = lookml.DimensionGroup( lookml.lookCase(col['COLUMN_NAME']) ) else: tmpDim = lookml.Dimension(lookml.lookCase(col['COLUMN_NAME'])) tmpDim.setType(col['LOOKER_TYPE']) tmpDim.sql = "${TABLE}." + col['COLUMN_NAME'] return tmpDim
def add_column(column, column_fqn, view_stack, views): view_fqn = view_stack[-1] view_id = snake_case('__'.join(view_fqn)) depth = len(view_fqn) label = ' '.join(column_fqn[depth:]).replace('_', ' ') table_view = views[view_id].view tail_idx = -(len(column_fqn) - len(view_fqn)) tail_fqn = column_fqn[tail_idx:] name = snake_case('_'.join(tail_fqn)) dotted_key = '.'.join(tail_fqn) sql = f'${{TABLE}}.{dotted_key}' if len(column_fqn) - len(view_fqn) >= 2: group_label = ' '.join(column_fqn[depth:-1]).replace('_', ' ').title() group_item_label = column_fqn[-1].replace('_', ' ').title() else: group_label = '' group_item_label = '' if column['data_type'].startswith('ARRAY'): dim = lookml.Dimension() dim.setProperty('sql', sql) dim.setName(name) dim.hide() table_view + dim view_name = snake_case('__'.join(column_fqn)) join_column = '.'.join([view_id, name]) view_stack.append(column_fqn) view = lookml.View(view_name).setFolder(OUTPUT_DIR) view.setMessage( f'This is an autogenerated view created by python {column_fqn}') views[view_name] = NamedView(column_fqn, view, join_column) elif column['data_type'] in ['INT64', 'FLOAT64', 'NUMERIC']: dim = lookml.Dimension() dim.setProperty('sql', sql) dim.setName(name) dim.setType('number') if group_label: dim.setProperty('group_label', group_label) dim.setProperty('group_item_label', group_item_label) table_view + dim elif column['data_type'] == 'STRING': dim = lookml.Dimension() dim.setProperty('sql', sql) dim.setName(name) dim.setType('string') if group_label: dim.setProperty('group_label', group_label) dim.setProperty('group_item_label', group_item_label) table_view + dim elif column['data_type'] == 'DATE': dim = lookml.DimensionGroup() dim.setProperty('datatype', 'date') dim.setProperty('convert_tz', 'no') dim.setProperty('sql', sql) if name[-5:] == '_date': name = name[0:-5] dim.setName(name) dim.setType('time') table_view + dim elif column['data_type'] == 'TIME': dim = lookml.Dimension() dim.setProperty('sql', sql) dim.setName(name) dim.setType('string') table_view + dim elif column['data_type'] == 'BOOL': dim = lookml.Dimension() dim.setProperty('sql', sql) dim.setName(name) dim.setType('yesno') if group_label: dim.setProperty('group_label', group_label) dim.setProperty('group_item_label', group_item_label) table_view + dim
def test_dense_lookml_option(self): lookml.lib.lang.ws.dense_children_threshold = 0 # lookml.DENSE_LOOKML_THRESHOLD = 0 print( lookml.Dimension( 'dimension: foo { hidden: yes sql: ${TABLE}.foo ;; }'))
''' # pp.pprint(view_data) tmp_view = l.View('example_derived_volatile', derived_table={ 'sql': sql }).setFolder(OUTPUT_DIR) tmp_view + 'schema_id' + 'entity_id' tmp_view.setExtensionRequired() tmp_view.setMessage('This is an autogenerated view created by python at ' + str(dt.datetime.now().replace(microsecond=0).isoformat())) ### # Iterating over the api response and adding syntactically correct Dimensions with appropriate access grants to prevent multi tenant data views for data in view_data: entity_id = data['entity_id'] if data['data_type'] == 'numerical' or data['data_type'] == 'decimal': dim = l.Dimension(data['column_name']) dim.setType('number') # dim.hide() dim.set_Field_Level_Permission(f'eid_{entity_id}') tmp_view + dim else: dim = l.Dimension(data['column_name']) dim.set_Field_Level_Permission(f'eid_{entity_id}') dim.setType('string') # dim.hide() tmp_view + dim ### # Adding a series of measures of type sum with field level permissioning measure = l.Measure('total_' + data['column_name']).setProperty( 'sql', '${' + data['column_name'] + '}').setType('sum')
# to be removed, purely for Join Talk test = ['order_items'] ### # Create View files for each table name for table_name in test: tmp_view = l.View(table_name + '_base').setFolder( OUTPUT_DIR).setExtensionRequired().setMessage( 'This is an autogenerated view created by python at ' + str(dt.datetime.now().replace(microsecond=0).isoformat())) tmp_view.setSqlTableName(f'public.{table_name}') for table in view_data: if table['table_name'] == table_name: if table['data_type'] == 'integer' or table[ 'data_type'] == 'double precision': dim = l.Dimension(table['column_name']) dim.hide() dim.setType('number') if table['column_name'] == 'id': dim.setPrimaryKey() tmp_view + dim else: tmp_view + dim elif table['data_type'] == 'timestamp without time zone': dim = l.DimensionGroup(table['column_name']) dim.hide() tmp_view + dim else: dim = l.Dimension(table['column_name'])