[
https://issues.apache.org/jira/browse/PHOENIX-1311?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15173382#comment-15173382
]
Ankit Singhal commented on PHOENIX-1311:
----------------------------------------
bq. I don't think we need to support SELECT SCHEMA() or SHOW SCHEMAS as there's
a standard JDBC method in DatabaseMetaData that would return the list of
schemas. Plus we don't have that kind of thing for tables. We could start
introducing stuff like that (or we could leave it to the tooling), but if we
are going to introduce that, let's do it in a separate JIRA.
Agreed [~giacomotaylor], we will modify api's in DatabaseMetaData if necessary
and just wanted to know whether we should store schema entity in SYSTEM.SCHEMA
or in SYSTEM.CATALOG with empty tablename.
bq. Would you mind providing a couple of examples in SELECT queries for how the
schema would be used and resolved? You're not proposing using a different
SELECT * FROM my_schema:my_table syntax are you?
{code}
> Use test_schema
> select * from T// schema will be resolved as 'test_schema' and hbase table
> "test_schema:T" will be referenced
> select * from new_schema.T // schema will be resolved as 'new_schema' and
> hbase table "new_schema:T" will be referenced.
{code}
No, I'm not proposing my_schema:my_table syntax.
bq. For b/w compat, I'm not sure a version flag on PTable is enough. We need
something outside of this, as this will change the way we find the PTable in
the first place. How do we know how to look for it, as we currently look for an
HTable with a name of "MY_SCHEMA.MY_TABLE". Perhaps a global config on whether
this feature is on or off, plus a requirement that the upgrade is done if it's
turned on?
Ok, I'm not sure on this. so started modifying one flow to understand if any
extra config required. For system tables, I can see the requirement of global
config. can you please refer any code where we need to resolve table to form
PTable?
Below is the test case on which I'll check:-
{code}
public void testBackWardCompatibility() throws Exception {
String namespace="TEST_SCHEMA";
String schemaName = namespace;
String tableName="TEST";
String phoenixFullTableName=schemaName+"."+tableName;
String hbaseFullTableName=schemaName+":"+tableName;
HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(),
TestUtil.TEST_PROPERTIES).getAdmin();
admin.createNamespace(NamespaceDescriptor.create(namespace).build());
admin.createTable(new
HTableDescriptor(TableName.valueOf(namespace, tableName))
.addFamily(new
HColumnDescriptor(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES)));
admin.createTable(new
HTableDescriptor(TableName.valueOf(phoenixFullTableName))
.addFamily(new
HColumnDescriptor(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES)));
Put put=new
Put(PVarchar.INSTANCE.toBytes(phoenixFullTableName));
put.addColumn(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES,
QueryConstants.EMPTY_COLUMN_BYTES,
QueryConstants.EMPTY_COLUMN_VALUE_BYTES);
HTable phoenixSchematable=new HTable(admin.getConfiguration(),
phoenixFullTableName);
phoenixSchematable.put(put);
put=new Put(PVarchar.INSTANCE.toBytes(hbaseFullTableName));
put.addColumn(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES,
QueryConstants.EMPTY_COLUMN_BYTES,
QueryConstants.EMPTY_COLUMN_VALUE_BYTES);
HTable namespaceMappedtable=new
HTable(admin.getConfiguration(), hbaseFullTableName);
namespaceMappedtable.put(put);
Properties props = new Properties();
Connection conn = DriverManager.getConnection(getUrl(), props);
String ddl = "create table "+phoenixFullTableName+"(tableName
varchar primary key)";
conn.createStatement().execute(ddl);
String query = "select tableName from "+phoenixFullTableName;
ResultSet rs = conn.createStatement().executeQuery(query);
assertTrue(rs.next());
assertEquals(phoenixFullTableName, rs.getString(1));
put=new
Put(SchemaUtil.getTableKey(null,schemaName,phoenixFullTableName));
put.addColumn(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES,
QueryConstants.EMPTY_COLUMN_BYTES,
PBoolean.INSTANCE.toBytes(Boolean.TRUE));
HTable metatable=new HTable(admin.getConfiguration(),
TableName.valueOf(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES));
metatable.put(put);
rs = conn.createStatement().executeQuery(query);
assertTrue(rs.next());
assertEquals(hbaseFullTableName, rs.getString(1));
}
{code}
> HBase namespaces surfaced in phoenix
> ------------------------------------
>
> Key: PHOENIX-1311
> URL: https://issues.apache.org/jira/browse/PHOENIX-1311
> Project: Phoenix
> Issue Type: New Feature
> Reporter: nicolas maillard
> Assignee: Ankit Singhal
> Priority: Minor
> Fix For: 4.8.0
>
> Attachments: PHOENIX-1311.docx, PHOENIX-1311_wip.patch,
> PHOENIX-1311_wip_2.patch
>
>
> Hbase (HBASE-8015) has the concept of namespaces in the form of
> myNamespace:MyTable it would be great if Phoenix leveraged this feature to
> give a database like feature on top of the table.
> Maybe to stay close to Hbase it could also be a create DB:Table...
> or DB.Table which is a more standard annotation?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)