Beispiel #1
0
 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
Beispiel #2
0
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
Beispiel #3
0
 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 ;; }'))
Beispiel #4
0
'''
# 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'])