Порядок обновления столбцов в метаданных

Мы используем метаданные proc (открытый интерфейс метаданных) для обновления некоторых метаданных из XML. Используя метод updatemetadata, как мы можем достичь следующего:

  • добавить новый столбец в определенное место в сопоставлении столбцов данной таблицы с использованием параметра function="REPLACE" (по умолчанию новый столбец будет первым в сопоставлении)

Мы используем версию 9.3.

Заранее спасибо!

1 ответ

Решение

Мы нашли решение: это нужно сделать в два этапа.

На первом этапе должен быть добавлен новый столбец. В зависимости от используемой вами функции, это будет либо первый, либо последний столбец в метаданных таблицы.

На втором шаге вы должны использовать опцию function="replace" с updatemetadata, где столбцы расположены в нужном порядке.

Пример:

В первом блоке updatemetadata поле TEST_PCT добавляется в таблицу HBR.TEST_7. Поскольку он добавляется с помощью функции = "заменить", он будет первым столбцом таблицы, а старые столбцы будут после него.

Таким образом, необходим второй блок метаданных с правильным порядком столбцов, и, поскольку на данный момент все столбцы уже существуют, он будет переупорядочивать их должным образом.

<Multiple_Requests>
<UpdateMetadata>
    <Metadata>
        <PhysicalTable  id="A52YJRW0.B30005KO" name="HBR.TEST_7" MemberType="DATA" PublicType="Table"  desc="Test_1_Notes á, é, í, ó, ö, ő, ü, ű" sastablename="TEST_7" UsageVersion="1000000">
            <Columns function="replace">
                <Column  objref="A52YJRW0.B80008J0">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J1">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J2">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J3">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  id="$o601" name="TEST_PCT" desc=" " isnullable="1" PublicType="Column" sascolumnlength="8" sascolumnname="TEST_PCT" SASColumnType="N" SASFormat="COMMAX22.2" SASInformat="COMMAX22.2" UsageVersion="1000000">
                    <Notes>
                        <TextStore Name="PrivateNote"  storedtext=" " TextRole="Note" UsageVersion="0"/>
                    </Notes>
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J5">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J6">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J7">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J8">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J9">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
            </Columns>
        </PhysicalTable>
    </Metadata>
    <Reposid>A0000001.A52YJRW0</Reposid>
    <Type>PhysicalTable</Type>
    <Objects/>
    <NS>SAS</NS>
    <Flags>268435456</Flags>
</UpdateMetadata>
<UpdateMetadata>
    <Metadata>
        <PhysicalTable  id="A52YJRW0.B30005KO" name="HBR.TEST_7" UsageVersion="1000000">
            <Columns function="replace">
                <Column  objref="A52YJRW0.B80008J0">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J1">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J2">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J3">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="$o601">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J5">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J6">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J7">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J8">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
                <Column  objref="A52YJRW0.B80008J9">
                    <Table>
                        <PhysicalTable  objref="A52YJRW0.B30005KO"/>
                    </Table>
                </Column>
            </Columns>
        </PhysicalTable>
    </Metadata>
    <Reposid>A0000001.A52YJRW0</Reposid>
    <Type>PhysicalTable</Type>
    <Objects/>
    <NS>SAS</NS>
    <Flags>268435456</Flags>
</UpdateMetadata>

Другие вопросы по тегам