{"id":274,"date":"2019-02-02T18:50:58","date_gmt":"2019-02-02T18:50:58","guid":{"rendered":"https:\/\/datablog.roman-halliday.com\/?p=274"},"modified":"2019-02-02T18:50:58","modified_gmt":"2019-02-02T18:50:58","slug":"partitions-in-sql-server-creating-a-partitioned-table","status":"publish","type":"post","link":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/","title":{"rendered":"Partitions in SQL Server: Creating a Partitioned Table"},"content":{"rendered":"<p>This is going to be the first in a series of posts about partitions. I&#8217;ve found that there are a number of common partitioning scenarios in data warehousing, and when I started writing about them I realise there was a lot to cover.<\/p>\n<p>Partitions are now a common feature in most DBMS environments, although the syntax and functionality varies between implementations. Here I&#8217;m looking at the fundamentals of partitioned tables in SQL Server.<\/p>\n<p>Partitions allow database administrators to specify how data for a table is stored\/grouped on the disk. Data is logically split by the value of a column (or combination of columns). This splitting of the data gives a number of potential performance\/maintenance benefits:<\/p>\n<ul>\n<li>Individual partitions can be truncated\/dropped (leaving the rest of the data untouched).<\/li>\n<li>Some reads can be at the partition level.<\/li>\n<li>Some locks can be at the partition level.<\/li>\n<\/ul>\n<p>A common partition scenario (at least in data warehousing) is to partition data by an activity date. This data can be partitioned at any granularity that the data type would allow in a query.<\/p>\n<h1>What makes a partitioned table in SQL Server?<\/h1>\n<p>In SQL Server, to partition a table you first need to define a function, and then a scheme.<\/p>\n<p><strong>Partition Function<\/strong>:\u00a0The definition of how data is to be split. It includes the data type and the value ranges to use in each partition.<\/p>\n<p><strong>Partition Scheme<\/strong>: The definition of how a function is to be applied to data files. This allows DBAs to split data across logical storage locations if required, however in most modern environments with large SANs most SQL Server implementations and their DBAs will just use &#8216;primary&#8217;.<\/p>\n<p>A partition function can be used in one or more schemes, and a scheme in one or more tables. There can be organisational advantages to sharing a scheme\/function across tables (update one, and you update everything in kind). However, in my experience most cases DBAs prefer to have one function and scheme combination for each table.<\/p>\n<h2>Partition Function<\/h2>\n<p>The function specifies the data type to use (in most of my cases, it&#8217;s a date), and a range of values to apply (to that data type) for partitions. The range is defined as being either <code>LEFT<\/code> or <code>RIGHT<\/code>. Generally, most people use <code>RIGHT<\/code>.<\/p>\n<p>See the &#8220;Example Partitioned Table&#8221; section for an example.<\/p>\n<p><strong>Left vs Right<\/strong>. This isn&#8217;t a foray into politics or a recap on they syntax for a join. This keyword defines if the data goes to the left (less than or equal to) or the right (greater than or equal to) the value specified.<\/p>\n<p>If we partition a table on year, specifying the years 2016, 2017 and 2018. What happens to the record for &#8217;01-JUN-2017&#8242;?<\/p>\n<ul>\n<li>RANGE RIGHT: It is placed into the partition <em>starting<\/em> 2017.<\/li>\n<li>RANGE LEFT: It is placed into the partition <em>ending<\/em> 2018.<\/li>\n<\/ul>\n<p>I&#8217;ll demonstrate this in a future article.<\/p>\n<h2>Partition Scheme<\/h2>\n<p>The scheme defines where (which filegroup) to store the data for individual partitions. For the sake of this article I&#8217;m keeping everything on primary.<\/p>\n<p>See the &#8220;Example Partitioned Table&#8221; section for an example.<\/p>\n<h2>Partitioned Table<\/h2>\n<p>Lastly a table needs to be defined (as normal), with two additional requirements:<\/p>\n<ol>\n<li>The storage location is given as the partition scheme (with the name of the column to be used for partitioning).<\/li>\n<li>The table must have a clustered index (usually the primary key) which includes the column\u00a0to be used for partitioning.<\/li>\n<\/ol>\n<p>See the &#8220;Example Partitioned Table&#8221; section for an example.<\/p>\n<h1>Example Partitioned Table<\/h1>\n<h2>Sample Function, Scheme and Table<\/h2>\n<p>Note: although we specify 3 partitions for the table, because this is a RIGHT table, an extra partition will automatically be added to the start of the table for all data values less than the lowest specified partition value.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">--------------------------------------------------------------------------------\r\n-- Partition Function\r\n-- Using RIGHT (so the value given is the LOWER value)\r\n--------------------------------------------------------------------------------\r\nCREATE PARTITION FUNCTION [FactTable_PF]\r\n      (DATE) -- Datatype to use\r\nAS\r\nRANGE RIGHT  -- LEFT or RIGHT see above\r\n FOR VALUES  -- Values on which to 'split' the data\r\n(\r\n    N'2016-01-01T00:00:00', -- This partition will contain 2 years data (2016 and 2017)\r\n    N'2018-01-01T00:00:00', -- This partition will only contain 1 year of data (2018)\r\n    N'2019-01-01T00:00:00'  -- This partition will contain all data from 2019 onwards (unless a subsequent partition is added in the future)\r\n);\r\n\r\n--------------------------------------------------------------------------------\r\n-- Partition Scheme (using the above function)\r\n--------------------------------------------------------------------------------\r\nCREATE PARTITION SCHEME [FactTable_PS]\r\n    AS PARTITION [FactTable_PF] -- This is where we specify the partition function\r\nALL TO([primary])\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Create Table (using the above scheme)\r\n--------------------------------------------------------------------------------\r\nCREATE TABLE [dbo].[FactTable_partitioned]\r\n(\r\n    [TheDate]     DATE,\r\n    [c_attribute] VARCHAR(100),\r\n    [c_metric]    BIGINT,\r\n    CONSTRAINT [PK_FactTable_partitioned] PRIMARY KEY ([TheDate], [c_attribute])\r\n)\r\nON [FactTable_PS]  -- This is where we specify the partition scheme\r\n  ([TheDate])      -- This is where we specify the column to apply the function within the scheme to\r\n;\r\n<\/pre>\n<h2>Sample Data<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">--------------------------------------------------------------------------------\r\n-- Create Date List\r\n--------------------------------------------------------------------------------\r\nDECLARE @DateStart DATE = '01-JAN-17';\r\nDECLARE @DateEnd   DATE = '01-JAN-19';\r\n\r\nWITH number_tbl AS (\r\nSELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL\r\nSELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL\r\nSELECT 8 UNION ALL SELECT 9\r\n), number_sequences AS (\r\nSELECT (t3.a + (10 * t2.a) + (100 * t1.a)) AS concatenate_calculation\r\n  FROM number_tbl t1\r\n  CROSS JOIN number_tbl t2\r\n  CROSS JOIN number_tbl t3\r\n), date_sequence AS (\r\nSELECT CAST(DateAdd(DAY, concatenate_calculation, @DateStart) AS DATE) AS [TheDate]\r\n  FROM number_sequences\r\n WHERE CAST(DateAdd(DAY, concatenate_calculation, @DateStart) AS DATE) &lt;= @DateEnd\r\n)\r\nSELECT [TheDate]\r\n  INTO #DateList\r\n  FROM date_sequence\r\n ORDER BY [TheDate]\r\n;\r\n\r\nCREATE UNIQUE CLUSTERED\r\n INDEX PK_DateList\r\n    ON #DateList\r\n      ([TheDate])\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Create Dummy Fact table (we will keep coming back to this)\r\n-- Using cartesian join, giving 4 rows for each date\r\n--------------------------------------------------------------------------------\r\nWITH s_data AS (\r\nSELECT 'Data 1' AS [c_attribute], 100 AS [c_metric] UNION ALL\r\nSELECT 'Data 2' AS [c_attribute], 200 AS [c_metric] UNION ALL\r\nSELECT 'Data 3' AS [c_attribute], 300 AS [c_metric] UNION ALL\r\nSELECT 'Data 4' AS [c_attribute], 400 AS [c_metric]\r\n)\r\nSELECT [TheDate],\r\n       [c_attribute],\r\n       [c_metric]\r\n  INTO #FactTable\r\n  FROM #DateList,\r\n       s_data\r\n;\r\n\r\nCREATE CLUSTERED\r\n INDEX SK_DateList\r\n    ON #FactTable\r\n      ([TheDate])\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Insert to partitioned table\r\n--------------------------------------------------------------------------------\r\nINSERT\r\n  INTO [dbo].[FactTable_partitioned]\r\nSELECT *\r\n  FROM #FactTable\r\n;<\/pre>\n<h1>Useful Views &amp; Notes<\/h1>\n<h2>View Detailed Partition Usage<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">--------------------------------------------------------------------------------\r\n-- Detailed View of Partitions and their usage\r\n--------------------------------------------------------------------------------\r\nSELECT OBJECT_NAME(p.[object_id]) AS [Table_Name],\r\n     --p.[object_id],\r\n     --p.[partition_id],\r\n       p.[partition_number],\r\n       p.[rows]                   AS [Partition_rows],\r\n       p.[data_compression_desc]  AS [Partition_data_compression],\r\n     --i.[index_id],         -- Linked by [object_id]\r\n       i.[name]                   AS [Index_Name],\r\n     --i.[type],\r\n       i.[type_desc]              AS [Index_Type],\r\n     --i.[is_unique],\r\n     --i.[is_primary_key],\r\n     --i.[is_unique_constraint],\r\n     --i.[data_space_id],    -- Link to scheme\r\n       s.[name]                   AS [Scheme_Name],\r\n     --f.[function_id],\r\n       f.[name]                   AS [Function_Name],\r\n     --f.[create_date]            AS [Function_create_date],\r\n     --f.[modify_date]            AS [Function_modify_date],\r\n     --rv.[boundary_id],     -- Link to partition_id\r\n       lv.[value]                 AS [Lower_Value],\r\n       rv.[value]                 AS [Upper_Value]\r\n  FROM sys.partitions p\r\n    INNER JOIN sys.objects o\r\n       ON o.[object_id] = p.[object_id]\r\n  --INNER JOIN sys.allocation_units a\r\n  --   ON p.[hobt_id] = a.[container_id]\r\n     LEFT JOIN sys.indexes i\r\n       ON i.[object_id] = p.[object_id]\r\n      AND i.[index_id]  = p.[index_id]\r\n     LEFT JOIN sys.partition_schemes s\r\n       ON s.[data_space_id] = i.[data_space_id]\r\n     LEFT JOIN sys.partition_functions f\r\n       ON f.[function_id] = s.[function_id]\r\n     LEFT JOIN sys.partition_range_values rv\r\n       ON rv.[function_id] = f.[function_id]\r\n      AND rv.[boundary_id] = p.[partition_number]\r\n     LEFT JOIN sys.partition_range_values lv\r\n       ON lv.[function_id] = f.[function_id]\r\n      AND lv.[boundary_id] = p.[partition_number] - 1\r\n WHERE 1=1\r\n --AND p.[object_id] = OBJECT_ID('FactTable') -- Filter for one object\r\n   AND o.[name] LIKE 'FactTable%'\r\n ORDER BY o.[name],\r\n       i.[name],\r\n       p.[partition_number]\r\n;<\/pre>\n<h2>View Partitions<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">--------------------------------------------------------------------------------\r\n-- View Partitions\r\n--------------------------------------------------------------------------------\r\n-- Partitions by table\r\nSELECT o.[name]           AS [objectname],\r\n       i.[name]           AS [indexname],\r\n       p.[partition_id],\r\n       p.[partition_number],\r\n       p.[rows]\r\n  FROM sys.partitions p\r\n    INNER JOIN sys.objects o ON o.object_id=p.object_id\r\n    INNER JOIN sys.indexes i ON i.object_id=p.object_id AND p.index_id=i.index_id\r\n WHERE o.[name] LIKE '%FactTable%' -- Filter for our table name(s)\r\n   AND o.[type] = N'U'             -- User defined table\r\n ORDER BY o.[name],\r\n       [partition_number]\r\n;\r\n<\/pre>\n<h2>View Function Configuration<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">--------------------------------------------------------------------------------\r\n-- Partition Function Configuration(s)\r\n--------------------------------------------------------------------------------\r\nSELECT * --CONVERT(DATETIME,Value)\r\n  FROM sys.partition_functions f\r\n    INNER JOIN sys.partition_range_values r   \r\n       ON f.function_id = r.function_id \r\n WHERE f.name LIKE '%FactTable%' -- Filter for our partition name(s)\r\n;<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Partitions are now a common feature in most DBMS environments, although the syntax and functionality varies between implementations. Here I&#8217;m looking at the fundamentals of partitioned tables in SQL Server.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[24,7,8],"class_list":["post-274","post","type-post","status-publish","format-standard","hentry","category-databases","category-sql-server","tag-partition","tag-sql","tag-t-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Partitions in SQL Server: Creating a Partitioned Table - Rows Across The Lake<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Partitions in SQL Server: Creating a Partitioned Table - Rows Across The Lake\" \/>\n<meta property=\"og:description\" content=\"Partitions are now a common feature in most DBMS environments, although the syntax and functionality varies between implementations. Here I&#039;m looking at the fundamentals of partitioned tables in SQL Server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/\" \/>\n<meta property=\"og:site_name\" content=\"Rows Across The Lake\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-02T18:50:58+00:00\" \/>\n<meta name=\"author\" content=\"david\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@d_roman_h\" \/>\n<meta name=\"twitter:site\" content=\"@d_roman_h\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"david\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/\"},\"author\":{\"name\":\"david\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\"},\"headline\":\"Partitions in SQL Server: Creating a Partitioned Table\",\"datePublished\":\"2019-02-02T18:50:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/\"},\"wordCount\":648,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\"},\"keywords\":[\"partition\",\"SQL\",\"T-SQL\"],\"articleSection\":[\"Databases\",\"SQL Server\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/\",\"url\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/\",\"name\":\"Partitions in SQL Server: Creating a Partitioned Table - Rows Across The Lake\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#website\"},\"datePublished\":\"2019-02-02T18:50:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/02\\\/partitions-in-sql-server-creating-a-partitioned-table\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Partitions in SQL Server: Creating a Partitioned Table\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#website\",\"url\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/\",\"name\":\"Rows Across The Lake\",\"description\":\"Data &amp; Databases\",\"publisher\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\",\"name\":\"david\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\",\"caption\":\"david\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Partitions in SQL Server: Creating a Partitioned Table - Rows Across The Lake","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/","og_locale":"en_GB","og_type":"article","og_title":"Partitions in SQL Server: Creating a Partitioned Table - Rows Across The Lake","og_description":"Partitions are now a common feature in most DBMS environments, although the syntax and functionality varies between implementations. Here I'm looking at the fundamentals of partitioned tables in SQL Server.","og_url":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/","og_site_name":"Rows Across The Lake","article_published_time":"2019-02-02T18:50:58+00:00","author":"david","twitter_card":"summary_large_image","twitter_creator":"@d_roman_h","twitter_site":"@d_roman_h","twitter_misc":{"Written by":"david","Estimated reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/#article","isPartOf":{"@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/"},"author":{"name":"david","@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b"},"headline":"Partitions in SQL Server: Creating a Partitioned Table","datePublished":"2019-02-02T18:50:58+00:00","mainEntityOfPage":{"@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/"},"wordCount":648,"commentCount":2,"publisher":{"@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b"},"keywords":["partition","SQL","T-SQL"],"articleSection":["Databases","SQL Server"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/","url":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/","name":"Partitions in SQL Server: Creating a Partitioned Table - Rows Across The Lake","isPartOf":{"@id":"https:\/\/datablog.roman-halliday.com\/#website"},"datePublished":"2019-02-02T18:50:58+00:00","breadcrumb":{"@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/datablog.roman-halliday.com\/"},{"@type":"ListItem","position":2,"name":"Partitions in SQL Server: Creating a Partitioned Table"}]},{"@type":"WebSite","@id":"https:\/\/datablog.roman-halliday.com\/#website","url":"https:\/\/datablog.roman-halliday.com\/","name":"Rows Across The Lake","description":"Data &amp; Databases","publisher":{"@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/datablog.roman-halliday.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b","name":"david","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g","caption":"david"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g"}}]}},"_links":{"self":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts\/274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/comments?post=274"}],"version-history":[{"count":3,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts\/274\/revisions"}],"predecessor-version":[{"id":286,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts\/274\/revisions\/286"}],"wp:attachment":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/media?parent=274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/categories?post=274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/tags?post=274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}