> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# kinetica.Records.IShardKeyExtractor

> kinetica.Records.IShardKeyExtractor — Kinetica C# API

<div className="kinetica-doxygen">
  <div className="contents">
    <p>Interface for extracting shard key values from a record. <a href="#details">More...</a></p>
    <div id="dynsection-0" className="dynheader closed"> Inheritance diagram for kinetica.Records.IShardKeyExtractor:</div>

    <div id="dynsection-0-summary" className="dynsummary" />

    <div id="dynsection-0-content" className="dyncontent">
      <div className="center" />

      <div className="center"><span className="legend">\[<a target="top" href="/content/api/cs/graph_legend">legend</a>]</span></div>
    </div>

    <table className="memberdecls">
      <tr className="heading">
        <td colSpan="2">
          <h2 className="groupheader"> Public Member Functions</h2>
        </td>
      </tr>

      <tr className="memitem:a5d62ad22e258059a1d7b207b9ed0c107" id="r_a5d62ad22e258059a1d7b207b9ed0c107">
        <td className="memItemLeft" align="right" valign="top"><a className="el" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues">ShardKeyValues</a> </td>
        <td className="memItemRight" valign="bottom"><a className="el" href="#a5d62ad22e258059a1d7b207b9ed0c107">GetShardKeyValues</a> ()</td>
      </tr>

      <tr className="memdesc:a5d62ad22e258059a1d7b207b9ed0c107">
        <td className="mdescLeft"> </td>
        <td className="mdescRight">Returns shard key column names and their typed values. <br /></td>
      </tr>

      <tr className="separator:a5d62ad22e258059a1d7b207b9ed0c107">
        <td className="memSeparator" colSpan="2"> </td>
      </tr>

      <tr className="memitem:a5d62ad22e258059a1d7b207b9ed0c107" id="r_a5d62ad22e258059a1d7b207b9ed0c107">
        <td className="memItemLeft" align="right" valign="top"><a className="el" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues">ShardKeyValues</a> </td>
        <td className="memItemRight" valign="bottom"><a className="el" href="#a5d62ad22e258059a1d7b207b9ed0c107">GetShardKeyValues</a> ()</td>
      </tr>

      <tr className="memdesc:a5d62ad22e258059a1d7b207b9ed0c107">
        <td className="mdescLeft"> </td>
        <td className="mdescRight">Returns shard key column names and their typed values. <br /></td>
      </tr>

      <tr className="separator:a5d62ad22e258059a1d7b207b9ed0c107">
        <td className="memSeparator" colSpan="2"> </td>
      </tr>
    </table>

    <h2 className="groupheader">Detailed Description</h2>

    <div className="textblock">
      <p>Interface for extracting shard key values from a record. </p>
      <p>Equivalent to Rust's ShardKeyExtractor trait.</p>
      <p>Implementing this interface enables shard-aware routing in the BulkInserter, allowing records to be sent directly to the correct worker node based on their shard key values.</p>

      <div className="fragment">
        <div className="line"><span className="keyword">public</span> <span className="keyword">class </span>SensorReading : <a className="code hl_interface" href="/content/api/cs/interfacekinetica_1_1Records_1_1IShardKeyExtractor">IShardKeyExtractor</a></div>

        <div className="line">
          {"{"}
        </div>

        <div className="line"> <span className="keyword">public</span> <span className="keywordtype">int</span> Id {"{"} <span className="keyword">get</span>; <span className="keyword">set</span>; {"}"}</div>
        <div className="line"> <span className="keyword">public</span> <span className="keywordtype">string</span> Region {"{"} <span className="keyword">get</span>; <span className="keyword">set</span>; {"}"}</div>
        <div className="line"> <span className="keyword">public</span> <span className="keywordtype">double</span> Value {"{"} <span className="keyword">get</span>; <span className="keyword">set</span>; {"}"}</div>

        <div className="line" />

        <div className="line"> <span className="keyword">public</span> ShardKeyValues <a className="code hl_function" href="#a5d62ad22e258059a1d7b207b9ed0c107">GetShardKeyValues</a>()</div>

        <div className="line">
          {"{"}
        </div>

        <div className="line"> <span className="comment">// Single shard key column</span></div>
        <div className="line"> <span className="keywordflow">return</span> ShardKeyValues.<a className="code hl_function" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues#a432a72d6f8cbdc51620802a8b9a32197">Single</a>(<span className="stringliteral">"id"</span>, ShardKeyValue.Int(Id));</div>

        <div className="line" />

        <div className="line"> <span className="comment">// Or for composite shard keys:</span></div>
        <div className="line"> <span className="comment">// return new ShardKeyValues(</span></div>
        <div className="line"> <span className="comment">// ("id", ShardKeyValue.Int(Id)),</span></div>
        <div className="line"> <span className="comment">// ("region", ShardKeyValue.String(Region))</span></div>
        <div className="line"> <span className="comment">// );</span></div>

        <div className="line">
          {"}"}
        </div>

        <div className="line">
          {"}"}
        </div>

        <div className="ttc" id="ainterfacekinetica_1_1Records_1_1IShardKeyExtractor_html">
          <div className="ttname"><a href="/content/api/cs/interfacekinetica_1_1Records_1_1IShardKeyExtractor">kinetica.Records.IShardKeyExtractor</a></div>
          <div className="ttdoc">Interface for extracting shard key values from a record.</div>
          <div className="ttdef"><span className="b">Definition</span> <a href="/content/api/cs/__build_2public-os__ubuntu24_804-arch__amd64-cc__gcc__13_83_80_2install_2Kinetica_2Records_2IShardKeyExtractor_8cs_source#l00034">IShardKeyExtractor.cs:35</a></div>
        </div>

        <div className="ttc" id="ainterfacekinetica_1_1Records_1_1IShardKeyExtractor_html_a5d62ad22e258059a1d7b207b9ed0c107">
          <div className="ttname"><a href="#a5d62ad22e258059a1d7b207b9ed0c107">kinetica.Records.IShardKeyExtractor.GetShardKeyValues</a></div>
          <div className="ttdeci">ShardKeyValues GetShardKeyValues()</div>
          <div className="ttdoc">Returns shard key column names and their typed values.</div>
        </div>

        <div className="ttc" id="astructkinetica_1_1Records_1_1ShardKeyValues_html_a432a72d6f8cbdc51620802a8b9a32197">
          <div className="ttname"><a href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues#a432a72d6f8cbdc51620802a8b9a32197">kinetica.Records.ShardKeyValues.Single</a></div>
          <div className="ttdeci">static ShardKeyValues Single(string name, ShardKeyValue value)</div>
          <div className="ttdoc">Creates a ShardKeyValues collection with a single value.</div>
        </div>
      </div>

      <p className="definition">Definition at line <a className="el" href="/content/api/cs/__build_2public-os__ubuntu24_804-arch__amd64-cc__gcc__13_83_80_2install_2Kinetica_2Records_2IShardKeyExtractor_8cs_source#l00034">34</a> of file <a className="el" href="/content/api/cs/__build_2public-os__ubuntu24_804-arch__amd64-cc__gcc__13_83_80_2install_2Kinetica_2Records_2IShardKeyExtractor_8cs_source">IShardKeyExtractor.cs</a>.</p>
    </div>

    <h2 className="groupheader">Member Function Documentation</h2>
    <h2 className="memtitle"><span className="permalink"><a href="#a5d62ad22e258059a1d7b207b9ed0c107">◆ </a></span>GetShardKeyValues() <span className="overload">\[1/2]</span></h2>

    <div className="memitem">
      <div className="memproto">
        <table className="memname">
          <tr>
            <td className="memname"><a className="el" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues">ShardKeyValues</a> kinetica.Records.IShardKeyExtractor.GetShardKeyValues </td>
            <td>(</td>

            <td className="paramname">
              <span className="paramname">
                <span className="em" />
              </span>
            </td>

            <td>)</td>

            <td />
          </tr>
        </table>
      </div>

      <div className="memdoc">
        <p>Returns shard key column names and their typed values. </p>
        <p>Only columns that are part of the shard key need to be included. The values are used for computing the routing hash to determine which worker node should receive the record.</p>
        <p>For best performance, implement this method to avoid allocations when possible (e.g., use <a className="el" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues#a432a72d6f8cbdc51620802a8b9a32197" title="Creates a ShardKeyValues collection with a single value.">ShardKeyValues.Single()</a> for single-column keys).</p>

        <div className="dl section return">
          <div className="dt">Returns</div>
          <div className="dd">A collection of (column name, value) pairs for the shard key.</div>
        </div>

        <p>Implemented in <a className="el" href="/content/api/cs/classExample_1_1AllTypesExample_1_1AllTypesRecord#a5fbf28787f1cbafe17cead8fc5990af1">Example.AllTypesExample.AllTypesRecord</a>, <a className="el" href="/content/api/cs/classExample_1_1AllTypesExample_1_1AllTypesRecord#a5fbf28787f1cbafe17cead8fc5990af1">Example.AllTypesExample.AllTypesRecord</a>, <a className="el" href="/content/api/cs/classExample_1_1SensorReading#a441d2a056d1d265fbbc1f06b45377ccf">Example.SensorReading</a>, <a className="el" href="/content/api/cs/classExample_1_1SensorReading#a441d2a056d1d265fbbc1f06b45377ccf">Example.SensorReading</a>, <a className="el" href="/content/api/cs/classExample_1_1ShardKeyExample_1_1ShardedRecord#a770e43d1afabab0d300b90d21bb6b501">Example.ShardKeyExample.ShardedRecord</a>, <a className="el" href="/content/api/cs/classExample_1_1ShardKeyExample_1_1ShardedRecord#a770e43d1afabab0d300b90d21bb6b501">Example.ShardKeyExample.ShardedRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Benchmarks_1_1BulkInserterBenchmarks_1_1BenchRecord#a01f9bac1cd6b03e9f8861d9ec291dbd3">Kinetica.Benchmarks.BulkInserterBenchmarks.BenchRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Benchmarks_1_1BulkInserterBenchmarks_1_1BenchRecord#a01f9bac1cd6b03e9f8861d9ec291dbd3">Kinetica.Benchmarks.BulkInserterBenchmarks.BenchRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord#a51a49e02b3a4bd117fea6bffb66159e7">Kinetica.LoadGenerator.IngestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord#a51a49e02b3a4bd117fea6bffb66159e7">Kinetica.LoadGenerator.IngestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord2#a46df986329808f42ebb5c91ad808efb7">Kinetica.LoadGenerator.IngestRecord2</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord2#a46df986329808f42ebb5c91ad808efb7">Kinetica.LoadGenerator.IngestRecord2</a>, <a className="el" href="/content/api/cs/classkinetica_1_1Records_1_1GenericRecord#ae4e298fcfc114df0cc96072768fc683c">kinetica.Records.GenericRecord</a>, <a className="el" href="/content/api/cs/classkinetica_1_1Records_1_1GenericRecord#ae4e298fcfc114df0cc96072768fc683c">kinetica.Records.GenericRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterDebugTest_1_1TestRecord#ac2db0da84af864e146fd1e9d3493d51b">Kinetica.Tests.IntegrationTests.BulkInserterDebugTest.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterDebugTest_1_1TestRecord#ac2db0da84af864e146fd1e9d3493d51b">Kinetica.Tests.IntegrationTests.BulkInserterDebugTest.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1ShardedRecord#aabf2f12cacc7fed36a58578b4a1f3ce2">Kinetica.Tests.IntegrationTests.BulkInserterTests.ShardedRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1ShardedRecord#aabf2f12cacc7fed36a58578b4a1f3ce2">Kinetica.Tests.IntegrationTests.BulkInserterTests.ShardedRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1TestRecord#ae823d41a23d9ca607063b49a1f5c8494">Kinetica.Tests.IntegrationTests.BulkInserterTests.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1TestRecord#ae823d41a23d9ca607063b49a1f5c8494">Kinetica.Tests.IntegrationTests.BulkInserterTests.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1CompositeDecimal12Record#ac085122cee9d0b82caa7fa3ac74d3af0">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.CompositeDecimal12Record</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1CompositeDecimal12Record#ac085122cee9d0b82caa7fa3ac74d3af0">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.CompositeDecimal12Record</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1Decimal12ShardedRecord#a5ec71f3288a0eba5c34ea5bfa48c8eae">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.Decimal12ShardedRecord</a>, and <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1Decimal12ShardedRecord#a5ec71f3288a0eba5c34ea5bfa48c8eae">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.Decimal12ShardedRecord</a>.</p>
      </div>
    </div>

    <h2 className="memtitle"><span className="permalink"><a href="#a5d62ad22e258059a1d7b207b9ed0c107">◆ </a></span>GetShardKeyValues() <span className="overload">\[2/2]</span></h2>

    <div className="memitem">
      <div className="memproto">
        <table className="memname">
          <tr>
            <td className="memname"><a className="el" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues">ShardKeyValues</a> kinetica.Records.IShardKeyExtractor.GetShardKeyValues </td>
            <td>(</td>

            <td className="paramname">
              <span className="paramname">
                <span className="em" />
              </span>
            </td>

            <td>)</td>

            <td />
          </tr>
        </table>
      </div>

      <div className="memdoc">
        <p>Returns shard key column names and their typed values. </p>
        <p>Only columns that are part of the shard key need to be included. The values are used for computing the routing hash to determine which worker node should receive the record.</p>
        <p>For best performance, implement this method to avoid allocations when possible (e.g., use <a className="el" href="/content/api/cs/structkinetica_1_1Records_1_1ShardKeyValues#a432a72d6f8cbdc51620802a8b9a32197" title="Creates a ShardKeyValues collection with a single value.">ShardKeyValues.Single()</a> for single-column keys).</p>

        <div className="dl section return">
          <div className="dt">Returns</div>
          <div className="dd">A collection of (column name, value) pairs for the shard key.</div>
        </div>

        <p>Implemented in <a className="el" href="/content/api/cs/classExample_1_1AllTypesExample_1_1AllTypesRecord#a5fbf28787f1cbafe17cead8fc5990af1">Example.AllTypesExample.AllTypesRecord</a>, <a className="el" href="/content/api/cs/classExample_1_1AllTypesExample_1_1AllTypesRecord#a5fbf28787f1cbafe17cead8fc5990af1">Example.AllTypesExample.AllTypesRecord</a>, <a className="el" href="/content/api/cs/classExample_1_1SensorReading#a441d2a056d1d265fbbc1f06b45377ccf">Example.SensorReading</a>, <a className="el" href="/content/api/cs/classExample_1_1SensorReading#a441d2a056d1d265fbbc1f06b45377ccf">Example.SensorReading</a>, <a className="el" href="/content/api/cs/classExample_1_1ShardKeyExample_1_1ShardedRecord#a770e43d1afabab0d300b90d21bb6b501">Example.ShardKeyExample.ShardedRecord</a>, <a className="el" href="/content/api/cs/classExample_1_1ShardKeyExample_1_1ShardedRecord#a770e43d1afabab0d300b90d21bb6b501">Example.ShardKeyExample.ShardedRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Benchmarks_1_1BulkInserterBenchmarks_1_1BenchRecord#a01f9bac1cd6b03e9f8861d9ec291dbd3">Kinetica.Benchmarks.BulkInserterBenchmarks.BenchRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Benchmarks_1_1BulkInserterBenchmarks_1_1BenchRecord#a01f9bac1cd6b03e9f8861d9ec291dbd3">Kinetica.Benchmarks.BulkInserterBenchmarks.BenchRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord#a51a49e02b3a4bd117fea6bffb66159e7">Kinetica.LoadGenerator.IngestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord#a51a49e02b3a4bd117fea6bffb66159e7">Kinetica.LoadGenerator.IngestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord2#a46df986329808f42ebb5c91ad808efb7">Kinetica.LoadGenerator.IngestRecord2</a>, <a className="el" href="/content/api/cs/classKinetica_1_1LoadGenerator_1_1IngestRecord2#a46df986329808f42ebb5c91ad808efb7">Kinetica.LoadGenerator.IngestRecord2</a>, <a className="el" href="/content/api/cs/classkinetica_1_1Records_1_1GenericRecord#ae4e298fcfc114df0cc96072768fc683c">kinetica.Records.GenericRecord</a>, <a className="el" href="/content/api/cs/classkinetica_1_1Records_1_1GenericRecord#ae4e298fcfc114df0cc96072768fc683c">kinetica.Records.GenericRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterDebugTest_1_1TestRecord#ac2db0da84af864e146fd1e9d3493d51b">Kinetica.Tests.IntegrationTests.BulkInserterDebugTest.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterDebugTest_1_1TestRecord#ac2db0da84af864e146fd1e9d3493d51b">Kinetica.Tests.IntegrationTests.BulkInserterDebugTest.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1ShardedRecord#aabf2f12cacc7fed36a58578b4a1f3ce2">Kinetica.Tests.IntegrationTests.BulkInserterTests.ShardedRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1ShardedRecord#aabf2f12cacc7fed36a58578b4a1f3ce2">Kinetica.Tests.IntegrationTests.BulkInserterTests.ShardedRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1TestRecord#ae823d41a23d9ca607063b49a1f5c8494">Kinetica.Tests.IntegrationTests.BulkInserterTests.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1BulkInserterTests_1_1TestRecord#ae823d41a23d9ca607063b49a1f5c8494">Kinetica.Tests.IntegrationTests.BulkInserterTests.TestRecord</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1CompositeDecimal12Record#ac085122cee9d0b82caa7fa3ac74d3af0">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.CompositeDecimal12Record</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1CompositeDecimal12Record#ac085122cee9d0b82caa7fa3ac74d3af0">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.CompositeDecimal12Record</a>, <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1Decimal12ShardedRecord#a5ec71f3288a0eba5c34ea5bfa48c8eae">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.Decimal12ShardedRecord</a>, and <a className="el" href="/content/api/cs/classKinetica_1_1Tests_1_1IntegrationTests_1_1Decimal12ShardKeyTests_1_1Decimal12ShardedRecord#a5ec71f3288a0eba5c34ea5bfa48c8eae">Kinetica.Tests.IntegrationTests.Decimal12ShardKeyTests.Decimal12ShardedRecord</a>.</p>
      </div>
    </div>

    <hr />

    The documentation for this interface was generated from the following files:

    <ul>
      <li>\_build/public-os\_ubuntu24.04-arch\_amd64-cc\_gcc\_13.3.0/install/Kinetica/Records/<a className="el" href="/content/api/cs/__build_2public-os__ubuntu24_804-arch__amd64-cc__gcc__13_83_80_2install_2Kinetica_2Records_2IShardKeyExtractor_8cs_source">IShardKeyExtractor.cs</a></li>
      <li>Kinetica/Records/<a className="el" href="/content/api/cs/Kinetica_2Records_2IShardKeyExtractor_8cs_source">IShardKeyExtractor.cs</a></li>
    </ul>
  </div>
</div>
