[
https://issues.apache.org/jira/browse/PHOENIX-3475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15655659#comment-15655659
]
James Taylor commented on PHOENIX-3475:
---------------------------------------
What metadata do you mean, [~akshita.malhotra]? If you want the The Phoenix
metadata for each index of a view is potentially different. That can be
retrieved via the DatabaseMetaData#getTables and DatabaseMetaData#getIndexInfo
calls based on the index or view name. Here's an example, augmenting an
existing unit test in ViewIndexIT:
{code}
@Test
public void testCreatingIndexOnGlobalView() throws Exception {
String baseTable = generateUniqueName();
String globalView = generateUniqueName();
String globalViewIdx = generateUniqueName();
try (Connection conn = DriverManager.getConnection(getUrl())) {
conn.createStatement().execute("CREATE TABLE " + baseTable + "
(TENANT_ID CHAR(15) NOT NULL, PK2 DATE NOT NULL, PK3 INTEGER NOT NULL, KV1
VARCHAR, KV2 VARCHAR, KV3 CHAR(15) CONSTRAINT PK PRIMARY KEY(TENANT_ID, PK2
ROW_TIMESTAMP, PK3)) MULTI_TENANT=true");
conn.createStatement().execute("CREATE VIEW " + globalView + " AS
SELECT * FROM " + baseTable);
conn.createStatement().execute("CREATE INDEX " + globalViewIdx + "
ON " + globalView + " (PK3 DESC, KV3) INCLUDE (KV1)");
ResultSet rs = conn.getMetaData().getTables("", "", globalViewIdx,
new String[] {"INDEX"});
assertTrue(rs.next());
rs = conn.getMetaData().getIndexInfo("", "", globalView, false,
false);
assertTrue(rs.next());
{code}
If you mean HBase metadata, then Phoenix doesn't store that, HBase does. For
that you could use the physical table name (retrieved as mentioned above), and
do an HBaseAdmin call to retrieve the HTableDescriptor.
Hopefully the migration tool isn't trying to create HTables on its own, but
uses Phoenix DDL. If that's the case, then the underlying HBase physical table
for the indexes on views will be created when the multi-tenant table or index
on view is created.
> MetaData #getTables() API doesn't return view indexes
> -----------------------------------------------------
>
> Key: PHOENIX-3475
> URL: https://issues.apache.org/jira/browse/PHOENIX-3475
> Project: Phoenix
> Issue Type: Bug
> Reporter: Akshita Malhotra
> Fix For: 4.9.0
>
>
> HBase migration tool uses DatabaseMetadata#getTables() API to retrieve the
> tables for copying data. We have found that API doesn't return base index
> tables ( _IDX_<base table name>)
> For testing purposes, we issue following DDL to generate the view and the
> corresponding view index:
> -CREATE VIEW IF NOT EXISTS MIGRATIONTEST_VIEW (OLD_VALUE_VIEW varchar) AS
> SELECT * FROM MIGRATIONTEST WHERE OLD_VALUE like 'E%'
> -CREATE INDEX IF NOT EXISTS MIGRATIONTEST_VIEW_IDX ON MIGRATIONTEST_VIEW
> (OLD_VALUE_VIEW)
> By using HBase API, we were able to confirm that base index table
> (_IDX_MIGRATIONTEST) is created.
> Both jdbc DatabaseMetadata API and P* getMetaDataCache API doesn't seem to
> be returning view indexes. Also P*MetaData #getTableRef API return
> "TableNotFoundException" when attempted to fetch PTable corresponding to the
> base index table name.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)