66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
#! encoding = utf-8
 | 
						|
import taos
 | 
						|
 | 
						|
LOCATIONS = ['California.SanFrancisco', 'California.LosAngles', 'California.SanDiego', 'California.SanJose',
 | 
						|
             'California.PaloAlto', 'California.Campbell', 'California.MountainView', 'California.Sunnyvale',
 | 
						|
             'California.SantaClara', 'California.Cupertino']
 | 
						|
 | 
						|
CREATE_DATABASE_SQL = 'create database if not exists {} keep 36500 duration 10 buffer 16 wal_level 1 wal_retention_period 3600'
 | 
						|
USE_DATABASE_SQL = 'use {}'
 | 
						|
DROP_TABLE_SQL = 'drop table if exists meters'
 | 
						|
DROP_DATABASE_SQL = 'drop database if exists {}'
 | 
						|
CREATE_STABLE_SQL = 'create stable meters (ts timestamp, current float, voltage int, phase float) tags ' \
 | 
						|
                    '(location binary(64), groupId int)'
 | 
						|
CREATE_TABLE_SQL = 'create table if not exists {} using meters tags (\'{}\', {})'
 | 
						|
 | 
						|
 | 
						|
def create_database_and_tables(host, port, user, password, db, table_count):
 | 
						|
    tags_tables = _init_tags_table_names(table_count=table_count)
 | 
						|
    conn = taos.connect(host=host, port=port, user=user, password=password)
 | 
						|
 | 
						|
    conn.execute(DROP_DATABASE_SQL.format(db))
 | 
						|
    conn.execute(CREATE_DATABASE_SQL.format(db))
 | 
						|
    conn.execute(USE_DATABASE_SQL.format(db))
 | 
						|
    conn.execute(DROP_TABLE_SQL)
 | 
						|
    conn.execute(CREATE_STABLE_SQL)
 | 
						|
    for tags in tags_tables:
 | 
						|
        location, group_id = _get_location_and_group(tags)
 | 
						|
        tables = tags_tables[tags]
 | 
						|
        for table_name in tables:
 | 
						|
            conn.execute(CREATE_TABLE_SQL.format(table_name, location, group_id))
 | 
						|
    conn.close()
 | 
						|
 | 
						|
 | 
						|
def clean(host, port, user, password, db):
 | 
						|
    conn = taos.connect(host=host, port=port, user=user, password=password)
 | 
						|
    conn.execute(DROP_DATABASE_SQL.format(db))
 | 
						|
    conn.close()
 | 
						|
 | 
						|
 | 
						|
def _init_tags_table_names(table_count):
 | 
						|
    tags_table_names = {}
 | 
						|
    group_id = 0
 | 
						|
    for i in range(table_count):
 | 
						|
        table_name = 'd{}'.format(i)
 | 
						|
        location_idx = i % len(LOCATIONS)
 | 
						|
        location = LOCATIONS[location_idx]
 | 
						|
        if location_idx == 0:
 | 
						|
            group_id += 1
 | 
						|
            if group_id > 10:
 | 
						|
                group_id -= 10
 | 
						|
        key = _tag_table_mapping_key(location=location, group_id=group_id)
 | 
						|
        if key not in tags_table_names:
 | 
						|
            tags_table_names[key] = []
 | 
						|
        tags_table_names[key].append(table_name)
 | 
						|
 | 
						|
    return tags_table_names
 | 
						|
 | 
						|
 | 
						|
def _tag_table_mapping_key(location, group_id):
 | 
						|
    return '{}_{}'.format(location, group_id)
 | 
						|
 | 
						|
 | 
						|
def _get_location_and_group(key):
 | 
						|
    fields = key.split('_')
 | 
						|
    return fields[0], fields[1]
 |