Source code for smv.conn.conninfos
#
# This file is licensed under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from smv.conn.smvconnectioninfo import SmvConnectionInfo
[docs]class SmvJdbcConnectionInfo(SmvConnectionInfo):
"""Connection Info for connection type "jdbc"
Attributes:
- url
- driver
- user
- password
"""
[docs] @staticmethod
def provider_type():
return "jdbc"
[docs] @staticmethod
def attributes():
return ["url", "driver", "user", "password"]
def _connect_for_read(self, smvApp):
builder = smvApp.sqlContext.read\
.format('jdbc')\
.option('url', self.url)
if (self.driver is not None):
builder = builder.option('driver', self.driver)
if (self.user is not None):
builder = builder.option('user', self.user)
if (self.password is not None):
builder = builder.option('password', self.password)
return builder
[docs] def get_contents(self, smvApp):
"""Return a list of table names
"""
# TODO: implement for specific DB
return []
[docs]class SmvHiveConnectionInfo(SmvConnectionInfo):
"""Connection Info for connection type "hive"
Attributes:
- schema
"""
[docs] @staticmethod
def provider_type():
return "hive"
[docs] @staticmethod
def attributes():
return ['schema']
[docs] def get_contents(self, smvApp):
"""Return a list of table names
"""
if (self.schema is None):
query = 'show tables'
else:
query = 'show tables from {}'.format(self.schema)
tables_df = smvApp.sqlContext.sql(query)
tablenames = [str(f[0]) for f in tables_df.select('tableName').collect()]
return tablenames
[docs]class SmvHdfsConnectionInfo(SmvConnectionInfo):
"""Connection Info for connection type "hdfs"
Attributes:
- path
Path attribute takes standard Hadoop HDFS api url. For example
- file:///tmp/my_data
- hdfs:///app/data
- /tmp/data
- data
"""
[docs] @staticmethod
def provider_type():
return "hdfs"
[docs] @staticmethod
def attributes():
return ['path']
[docs] def get_contents(self, smvApp):
"""Return a list of file/dir names
"""
# TODO: should be recursive and return the tree
return [str(f) for f in smvApp._jvm.SmvPythonHelper.getDirList(self.path)]
SmvHdfsEmptyConn = SmvHdfsConnectionInfo(
"emptydir",
{"smv.conn.emptydir.path": ""}
)